aboutsummaryrefslogtreecommitdiff
path: root/weed/command
diff options
context:
space:
mode:
authorhilimd <68371223+hilimd@users.noreply.github.com>2021-11-25 15:53:35 +0800
committerGitHub <noreply@github.com>2021-11-25 15:53:35 +0800
commitaa1ef0298445764d9214066e98a26a2be2354776 (patch)
tree9c67400beadaa24da61ef190fe9c84cef4641e8f /weed/command
parent34240606f78395345ca7f6d7fe66a223c9bdf072 (diff)
parentda1c755f6ac4ea0a53c3f6f7b83b4115468e1887 (diff)
downloadseaweedfs-aa1ef0298445764d9214066e98a26a2be2354776.tar.xz
seaweedfs-aa1ef0298445764d9214066e98a26a2be2354776.zip
Merge pull request #88 from chrislusf/master
sync
Diffstat (limited to 'weed/command')
-rw-r--r--weed/command/filer_remote_gateway_buckets.go11
-rw-r--r--weed/command/filer_remote_sync_dir.go21
-rw-r--r--weed/command/scaffold/filer.toml6
3 files changed, 22 insertions, 16 deletions
diff --git a/weed/command/filer_remote_gateway_buckets.go b/weed/command/filer_remote_gateway_buckets.go
index bd3e76859..d70e96904 100644
--- a/weed/command/filer_remote_gateway_buckets.go
+++ b/weed/command/filer_remote_gateway_buckets.go
@@ -199,8 +199,7 @@ func (option *RemoteGatewayOptions) makeBucketedEventProcessor(filerSource *sour
return client.WriteDirectory(dest, message.NewEntry)
}
glog.V(0).Infof("create %s", remote_storage.FormatLocation(dest))
- reader := filer.NewFileReader(filerSource, message.NewEntry)
- remoteEntry, writeErr := client.WriteFile(dest, message.NewEntry, reader)
+ remoteEntry, writeErr := retriedWriteFile(client, filerSource, message.NewEntry, dest)
if writeErr != nil {
return writeErr
}
@@ -264,9 +263,7 @@ func (option *RemoteGatewayOptions) makeBucketedEventProcessor(filerSource *sour
return client.UpdateFileMetadata(oldDest, message.OldEntry, message.NewEntry)
} else {
newDest := toRemoteStorageLocation(newBucket, util.NewFullPath(message.NewParentPath, message.NewEntry.Name), newRemoteStorageMountLocation)
- reader := filer.NewFileReader(filerSource, message.NewEntry)
- glog.V(0).Infof("create %s", remote_storage.FormatLocation(newDest))
- remoteEntry, writeErr := client.WriteFile(newDest, message.NewEntry, reader)
+ remoteEntry, writeErr := retriedWriteFile(client, filerSource, message.NewEntry, newDest)
if writeErr != nil {
return writeErr
}
@@ -303,9 +300,7 @@ func (option *RemoteGatewayOptions) makeBucketedEventProcessor(filerSource *sour
if message.NewEntry.IsDirectory {
return client.WriteDirectory(newDest, message.NewEntry)
}
- reader := filer.NewFileReader(filerSource, message.NewEntry)
- glog.V(0).Infof("create %s", remote_storage.FormatLocation(newDest))
- remoteEntry, writeErr := client.WriteFile(newDest, message.NewEntry, reader)
+ remoteEntry, writeErr := retriedWriteFile(client, filerSource, message.NewEntry, newDest)
if writeErr != nil {
return writeErr
}
diff --git a/weed/command/filer_remote_sync_dir.go b/weed/command/filer_remote_sync_dir.go
index 8ff933833..e24c8f9e6 100644
--- a/weed/command/filer_remote_sync_dir.go
+++ b/weed/command/filer_remote_sync_dir.go
@@ -108,8 +108,7 @@ func makeEventProcessor(remoteStorage *remote_pb.RemoteConf, mountedDir string,
return client.WriteDirectory(dest, message.NewEntry)
}
glog.V(0).Infof("create %s", remote_storage.FormatLocation(dest))
- reader := filer.NewFileReader(filerSource, message.NewEntry)
- remoteEntry, writeErr := client.WriteFile(dest, message.NewEntry, reader)
+ remoteEntry, writeErr := retriedWriteFile(client, filerSource, message.NewEntry, dest)
if writeErr != nil {
return writeErr
}
@@ -146,9 +145,7 @@ func makeEventProcessor(remoteStorage *remote_pb.RemoteConf, mountedDir string,
if err := client.DeleteFile(oldDest); err != nil {
return err
}
- reader := filer.NewFileReader(filerSource, message.NewEntry)
- glog.V(0).Infof("create %s", remote_storage.FormatLocation(dest))
- remoteEntry, writeErr := client.WriteFile(dest, message.NewEntry, reader)
+ remoteEntry, writeErr := retriedWriteFile(client, filerSource, message.NewEntry, dest)
if writeErr != nil {
return writeErr
}
@@ -160,6 +157,20 @@ func makeEventProcessor(remoteStorage *remote_pb.RemoteConf, mountedDir string,
return eachEntryFunc, nil
}
+func retriedWriteFile(client remote_storage.RemoteStorageClient, filerSource *source.FilerSource, newEntry *filer_pb.Entry, dest *remote_pb.RemoteStorageLocation) (remoteEntry *filer_pb.RemoteEntry, err error) {
+ var writeErr error
+ err = util.Retry("writeFile", func() error {
+ reader := filer.NewFileReader(filerSource, newEntry)
+ glog.V(0).Infof("create %s", remote_storage.FormatLocation(dest))
+ remoteEntry, writeErr = client.WriteFile(dest, newEntry, reader)
+ if writeErr != nil {
+ return writeErr
+ }
+ return nil
+ })
+ return
+}
+
func collectLastSyncOffset(filerClient filer_pb.FilerClient, grpcDialOption grpc.DialOption, filerAddress pb.ServerAddress, mountedDir string, timeAgo time.Duration) time.Time {
// 1. specified by timeAgo
// 2. last offset timestamp for this directory
diff --git a/weed/command/scaffold/filer.toml b/weed/command/scaffold/filer.toml
index aec409408..a56251ae7 100644
--- a/weed/command/scaffold/filer.toml
+++ b/weed/command/scaffold/filer.toml
@@ -61,12 +61,12 @@ connection_max_lifetime_seconds = 0
interpolateParams = false
# if insert/upsert failing, you can disable upsert or update query syntax to match your RDBMS syntax:
enableUpsert = true
-upsertQuery = """INSERT INTO ` + "`%s`" + ` (dirhash,name,directory,meta) VALUES(?,?,?,?) ON DUPLICATE KEY UPDATE meta = VALUES(meta)"""
+upsertQuery = """INSERT INTO `%s` (dirhash,name,directory,meta) VALUES(?,?,?,?) ON DUPLICATE KEY UPDATE meta = VALUES(meta)"""
[mysql2] # or memsql, tidb
enabled = false
createTable = """
- CREATE TABLE IF NOT EXISTS ` + "`%s`" + ` (
+ CREATE TABLE IF NOT EXISTS `%s` (
dirhash BIGINT,
name VARCHAR(1000) BINARY,
directory TEXT BINARY,
@@ -85,7 +85,7 @@ connection_max_lifetime_seconds = 0
interpolateParams = false
# if insert/upsert failing, you can disable upsert or update query syntax to match your RDBMS syntax:
enableUpsert = true
-upsertQuery = """INSERT INTO ` + "`%s`" + ` (dirhash,name,directory,meta) VALUES(?,?,?,?) ON DUPLICATE KEY UPDATE meta = VALUES(meta)"""
+upsertQuery = """INSERT INTO `%s` (dirhash,name,directory,meta) VALUES(?,?,?,?) ON DUPLICATE KEY UPDATE meta = VALUES(meta)"""
[postgres] # or cockroachdb, YugabyteDB
# CREATE TABLE IF NOT EXISTS filemeta (