mirror of
https://github.com/versity/versitygw.git
synced 2026-01-06 03:44:51 +00:00
This fixes the cases for racing uploads with the same object names. Before we were making some bad assumptions about what would cause an error when trying to link/rename the final object name into the namespace, but missed the case that another upload for the same name could be racing with this upload and causing an incorrect error. This also changes the order of setting metadata to prevent accidental setting of metadata for the current upload to another racing upload. This also fix auth.CheckObjectAccess() when objects are removed while this runs. Fixes #854
68 lines
1.5 KiB
Go
68 lines
1.5 KiB
Go
// Copyright 2023 Versity Software
|
|
// This file is 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.
|
|
|
|
//go:build !(linux && amd64)
|
|
|
|
package scoutfs
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"os"
|
|
|
|
"github.com/versity/versitygw/auth"
|
|
)
|
|
|
|
func New(rootdir string, opts ScoutfsOpts) (*ScoutFS, error) {
|
|
return nil, fmt.Errorf("scoutfs only available on linux")
|
|
}
|
|
|
|
type tmpfile struct{}
|
|
|
|
var (
|
|
errNotSupported = errors.New("not supported")
|
|
)
|
|
|
|
func (s *ScoutFS) openTmpFile(_, _, _ string, _ int64, _ auth.Account) (*tmpfile, error) {
|
|
// make these look used for static check
|
|
_ = s.chownuid
|
|
_ = s.chowngid
|
|
_ = s.euid
|
|
_ = s.egid
|
|
return nil, errNotSupported
|
|
}
|
|
|
|
func (tmp *tmpfile) link() error {
|
|
return errNotSupported
|
|
}
|
|
|
|
func (tmp *tmpfile) Write(b []byte) (int, error) {
|
|
return 0, errNotSupported
|
|
}
|
|
|
|
func (tmp *tmpfile) cleanup() {
|
|
}
|
|
|
|
func (tmp *tmpfile) File() *os.File {
|
|
return nil
|
|
}
|
|
|
|
func moveData(_, _ *os.File) error {
|
|
return errNotSupported
|
|
}
|
|
|
|
func statMore(_ string) (stat, error) {
|
|
return stat{}, errNotSupported
|
|
}
|