minio/erasure/lru.go
Harshavardhana 1e7515a7df Add erasure coding and decoding using Intel Storage Acceleration library
- move contrib/erasure --> contrib/isal
 - bring in low level 'isal' package for Go for exposing C functions
 - Implement Erasure 'encoding'
   Supports - Reed Solomon Codes, Cauchy Codes
 - Implement Erasure 'decoding'
   Supports - Reed Solomon Codes, Cauchy Codes
 - Renames Minios -> Minio at all the references
2014-11-13 15:20:18 -08:00

65 lines
1.5 KiB
Go

/*
* Mini Object Storage, (C) 2014 Minio, Inc.
*
* 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.
*/
package erasure
import (
"github.com/golang/groupcache/lru"
"sync"
)
// thread-safe LRU cache from GroupCache
type Cache struct {
mutex sync.RWMutex
cache *lru.Cache
}
var DefaultCache *Cache = GetCache(0)
// Allocate ``Cache`` LRU
func GetCache(capacity int) *Cache {
return &Cache{
cache: lru.New(capacity),
}
}
// ``GetC()`` -- Grab encoder from LRU
func (c *Cache) GetC(ep EncoderParams) *Encoder {
if encoder, ret := c._Get(ep); ret {
return encoder
}
encoder := NewEncoder(&ep)
c._Put(ep, encoder)
return encoder
}
// ``_Get()`` -- Get key from existing LRU
func (c *Cache) _Get(ep EncoderParams) (*Encoder, bool) {
c.mutex.RLock()
defer c.mutex.RUnlock()
if encoder, ret := c.cache.Get(ep); ret {
return encoder.(*Encoder), ret
}
return nil, false
}
// ``_Put()`` -- Add key to existing LRU
func (c *Cache) _Put(ep EncoderParams, encoder *Encoder) {
c.mutex.Lock()
defer c.mutex.Unlock()
c.cache.Add(ep, encoder)
}