|
|
@ -610,8 +610,8 @@ func (p *PoolMaster) Lookup(id string) (exists bool) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
p.WORMLock.Lock()
|
|
|
|
p.lock.Lock()
|
|
|
|
defer p.WORMLock.Unlock()
|
|
|
|
defer p.lock.Unlock()
|
|
|
|
for _, wormPool := range p.WORMPools { // WORM Pools
|
|
|
|
for _, wormPool := range p.WORMPools { // WORM Pools
|
|
|
|
for _, poolItem := range wormPool.items {
|
|
|
|
for _, poolItem := range wormPool.items {
|
|
|
|
if poolItem == id {
|
|
|
|
if poolItem == id {
|
|
|
@ -699,8 +699,8 @@ func (p *PoolMaster) FetchLoadWORM(chunkID string, fileID string, writer io.Writ
|
|
|
|
}
|
|
|
|
}
|
|
|
|
func (p *PoolMaster) CleanWORMTemp() (err error) {
|
|
|
|
func (p *PoolMaster) CleanWORMTemp() (err error) {
|
|
|
|
p.lock.Lock()
|
|
|
|
p.lock.Lock()
|
|
|
|
p.WORMLock.Lock()
|
|
|
|
//p.WORMLock.Lock()
|
|
|
|
defer p.WORMLock.Unlock()
|
|
|
|
//defer p.WORMLock.Unlock()
|
|
|
|
defer p.lock.Unlock()
|
|
|
|
defer p.lock.Unlock()
|
|
|
|
|
|
|
|
|
|
|
|
for _, wormPool := range p.WORMPools {
|
|
|
|
for _, wormPool := range p.WORMPools {
|
|
|
@ -735,16 +735,17 @@ func (p *PoolMaster) Fetch(id string, writer io.Writer) (err error) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
p.WORMLock.Lock()
|
|
|
|
p.lock.Lock()
|
|
|
|
defer p.WORMLock.Unlock()
|
|
|
|
|
|
|
|
for _, wormPool := range p.WORMPools {
|
|
|
|
for _, wormPool := range p.WORMPools {
|
|
|
|
for _, poolItem := range wormPool.items {
|
|
|
|
for _, poolItem := range wormPool.items {
|
|
|
|
if poolItem == id {
|
|
|
|
if poolItem == id {
|
|
|
|
fmt.Printf("Fetch WORMPool %s file %s\n", wormPool.PoolID, id)
|
|
|
|
fmt.Printf("Fetch WORMPool %s file %s\n", wormPool.PoolID, id)
|
|
|
|
|
|
|
|
p.lock.Unlock()
|
|
|
|
return wormPool.Fetch(id, writer)
|
|
|
|
return wormPool.Fetch(id, writer)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
p.lock.Unlock()
|
|
|
|
for _, fullPool := range p.FullPools {
|
|
|
|
for _, fullPool := range p.FullPools {
|
|
|
|
for _, poolItem := range fullPool.items {
|
|
|
|
for _, poolItem := range fullPool.items {
|
|
|
|
if poolItem == id {
|
|
|
|
if poolItem == id {
|
|
|
@ -862,7 +863,7 @@ func (p *PoolMaster) Store(id string, src io.Reader, targetSize int64) (err erro
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
pool.itemCount = newItemCount
|
|
|
|
pool.itemCount = newItemCount
|
|
|
|
fmt.Printf("Current Pool %s, Recounted ItemCount = %d\n", pool.PoolID, pool.itemCount)
|
|
|
|
//fmt.Printf("Current Pool %s, Recounted ItemCount = %d\n", pool.PoolID, pool.itemCount)
|
|
|
|
if pool.itemCount >= PoolMaxItems {
|
|
|
|
if pool.itemCount >= PoolMaxItems {
|
|
|
|
pool.ReadOnly = true
|
|
|
|
pool.ReadOnly = true
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -893,8 +894,8 @@ func main() {
|
|
|
|
if len(poolMaster.FullPools) > 0 {
|
|
|
|
if len(poolMaster.FullPools) > 0 {
|
|
|
|
poolMaster.lock.Lock()
|
|
|
|
poolMaster.lock.Lock()
|
|
|
|
fmt.Printf("Aquiring WORMLock for Regular FullPool Pack\n")
|
|
|
|
fmt.Printf("Aquiring WORMLock for Regular FullPool Pack\n")
|
|
|
|
poolMaster.WORMLock.Lock()
|
|
|
|
//poolMaster.WORMLock.Lock()
|
|
|
|
fmt.Printf("Aquired WORMLock success for Regular FullPool Pack\n")
|
|
|
|
//fmt.Printf("Aquired WORMLock success for Regular FullPool Pack\n")
|
|
|
|
|
|
|
|
|
|
|
|
var deletedPools []string
|
|
|
|
var deletedPools []string
|
|
|
|
for _, fullPool := range poolMaster.FullPools {
|
|
|
|
for _, fullPool := range poolMaster.FullPools {
|
|
|
@ -932,15 +933,18 @@ func main() {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//fmt.Printf("unlock WORMLock Regular FullPool Pack\n")
|
|
|
|
|
|
|
|
//poolMaster.WORMLock.Unlock()
|
|
|
|
|
|
|
|
fmt.Printf("unlock lock Regular FullPool Pack\n")
|
|
|
|
poolMaster.lock.Unlock()
|
|
|
|
poolMaster.lock.Unlock()
|
|
|
|
poolMaster.WORMLock.Unlock()
|
|
|
|
|
|
|
|
fmt.Printf("unlock WORMLock Regular FullPool Pack\n")
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//
|
|
|
|
//
|
|
|
|
poolMaster.CleanWORMTemp()
|
|
|
|
poolMaster.CleanWORMTemp()
|
|
|
|
time.Sleep(time.Second * 10)
|
|
|
|
time.Sleep(time.Second * 10)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}()
|
|
|
|
}()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Initial packing
|
|
|
|
for _, localPool := range poolMaster.LocalPools {
|
|
|
|
for _, localPool := range poolMaster.LocalPools {
|
|
|
|
if localPool.ReadOnly {
|
|
|
|
if localPool.ReadOnly {
|
|
|
|
|
|
|
|
|
|
|
|