Support bucket versioning (#9377)

- Implement a new xl.json 2.0.0 format to support,
  this moves the entire marshaling logic to POSIX
  layer, top layer always consumes a common FileInfo
  construct which simplifies the metadata reads.
- Implement list object versions
- Migrate to siphash from crchash for new deployments
  for object placements.

Fixes #2111
This commit is contained in:
Harshavardhana
2020-06-12 20:04:01 -07:00
committed by GitHub
parent 43d6e3ae06
commit 4915433bd2
203 changed files with 13833 additions and 6919 deletions

View File

@@ -45,11 +45,11 @@ type RWLocker interface {
}
// newNSLock - return a new name space lock map.
func newNSLock(isDistXL bool) *nsLockMap {
func newNSLock(isDistErasure bool) *nsLockMap {
nsMutex := nsLockMap{
isDistXL: isDistXL,
isDistErasure: isDistErasure,
}
if isDistXL {
if isDistErasure {
return &nsMutex
}
nsMutex.lockMap = make(map[string]*nsLock)
@@ -66,9 +66,9 @@ type nsLock struct {
// Unlock, RLock and RUnlock.
type nsLockMap struct {
// Indicates if namespace is part of a distributed setup.
isDistXL bool
lockMap map[string]*nsLock
lockMapMutex sync.Mutex
isDistErasure bool
lockMap map[string]*nsLock
lockMapMutex sync.Mutex
}
// Lock the namespace resource.
@@ -190,7 +190,7 @@ type localLockInstance struct {
// volume, path and operation ID.
func (n *nsLockMap) NewNSLock(ctx context.Context, lockersFn func() []dsync.NetLocker, volume string, paths ...string) RWLocker {
opsID := mustGetUUID()
if n.isDistXL {
if n.isDistErasure {
drwmutex := dsync.NewDRWMutex(ctx, &dsync.Dsync{
GetLockersFn: lockersFn,
}, pathsJoinPrefix(volume, paths...)...)