|
|
@ -32,8 +32,8 @@ type Mapper struct { |
|
|
|
volumeLock sync.Mutex |
|
|
|
sequenceLock sync.Mutex |
|
|
|
Machines []*Machine |
|
|
|
vid2machineId map[uint32]int //machineId is +1 of the index of []*Machine, to detect not found entries
|
|
|
|
Writers []uint32 // transient array of Writers volume id
|
|
|
|
vid2machineId map[topology.VolumeId]int //machineId is +1 of the index of []*Machine, to detect not found entries
|
|
|
|
Writers []topology.VolumeId // transient array of Writers volume id
|
|
|
|
|
|
|
|
FileIdSequence uint64 |
|
|
|
fileIdCounter uint64 |
|
|
@ -47,9 +47,9 @@ func NewMachine(server, publicUrl string, volumes []topology.VolumeInfo) *Machin |
|
|
|
|
|
|
|
func NewMapper(dirname string, filename string, volumeSizeLimit uint64) (m *Mapper) { |
|
|
|
m = &Mapper{dir: dirname, fileName: filename} |
|
|
|
m.vid2machineId = make(map[uint32]int) |
|
|
|
m.vid2machineId = make(map[topology.VolumeId]int) |
|
|
|
m.volumeSizeLimit = volumeSizeLimit |
|
|
|
m.Writers = *new([]uint32) |
|
|
|
m.Writers = *new([]topology.VolumeId) |
|
|
|
m.Machines = *new([]*Machine) |
|
|
|
|
|
|
|
seqFile, se := os.OpenFile(path.Join(m.dir, m.fileName+".seq"), os.O_RDONLY, 0644) |
|
|
@ -102,7 +102,7 @@ func (m *Mapper) NextFileId(c string) (uint64,int) { |
|
|
|
m.fileIdCounter = m.fileIdCounter - count |
|
|
|
return m.FileIdSequence - m.fileIdCounter, int(count) |
|
|
|
} |
|
|
|
func (m *Mapper) Get(vid uint32) (*Machine, error) { |
|
|
|
func (m *Mapper) Get(vid topology.VolumeId) (*Machine, error) { |
|
|
|
machineId := m.vid2machineId[vid] |
|
|
|
if machineId <= 0 { |
|
|
|
return nil, errors.New("invalid volume id " + strconv.FormatUint(uint64(vid), 10)) |
|
|
@ -134,7 +134,7 @@ func (m *Mapper) Add(machine Machine) { |
|
|
|
m.vid2machineId[v.Id] = machineId + 1 //use base 1 indexed, to detect not found cases
|
|
|
|
} |
|
|
|
//setting Writers, copy-on-write because of possible updating, this needs some future work!
|
|
|
|
var writers []uint32 |
|
|
|
var writers []topology.VolumeId |
|
|
|
for _, machine_entry := range m.Machines { |
|
|
|
for _, v := range machine_entry.Volumes { |
|
|
|
if uint64(v.Size) < m.volumeSizeLimit { |
|
|
|