diff --git a/db/topology.go b/db/topology.go index 0f343e251..b3b016c8b 100644 --- a/db/topology.go +++ b/db/topology.go @@ -12,6 +12,7 @@ import ( var FrameDoesNotExistError = errors.New("Frame does not exist.") var SliceDoesNotExistError = errors.New("Slice does not exist.") +var FragmentDoesNotExistError = errors.New("Fragment does not exist.") var FrameSliceIntersectDoesNotExistError = errors.New("FrameSliceIntersect does not exist.") type Location struct { @@ -67,10 +68,19 @@ type Frame struct { type FrameSliceIntersect struct { slice *Slice frame *Frame - Fragments []Fragment + Fragments []*Fragment Hashring *consistent.Consistent } +func (fsi *FrameSliceIntersect) GetFragment(fragment_id int) (*Fragment, error) { + for _, fragment := range fsi.Fragments { + if fragment.id == fragment_id { + return fragment, nil + } + } + return nil, FragmentDoesNotExistError +} + // Add a slice to a database func (d *Database) AddSlice(slice_id int) *Slice { slice := Slice{id: slice_id} @@ -143,7 +153,7 @@ func (d *Database) AddFragment(frame *Frame, slice *Slice, process *Process, fra frameslice, _ := d.GetFrameSliceIntersect(frame, slice) fragment := Fragment{process: process, id: fragment_id} - frameslice.Fragments = append(frameslice.Fragments, fragment) + frameslice.Fragments = append(frameslice.Fragments, &fragment) frameslice.Hashring.Add(fmt.Sprintf("%d", fragment_id)) diff --git a/db/topology_test.go b/db/topology_test.go index 8de4132be..1feb7f795 100644 --- a/db/topology_test.go +++ b/db/topology_test.go @@ -25,8 +25,8 @@ func TestTopology(t *testing.T) { database := cluster.AddDatabase("property49") database.AddFrame("general") //database.AddFrame("brands") - database.AddSlice() - database.AddSlice() + database.AddSlice(0) + database.AddSlice(1) //database.AddSlice() log.Println(database) @@ -41,7 +41,7 @@ func TestTopology(t *testing.T) { frame, _ := database.GetFrame("general") slice, _ := database.GetSlice(0) - loc1, _ := NewLocation("192.168.1.100:8001") + //loc1, _ := NewLocation("192.168.1.100:8001") /* loc2, _ := NewLocation("192.168.1.100:8002") loc3, _ := NewLocation("192.168.1.100:8003") @@ -49,11 +49,13 @@ func TestTopology(t *testing.T) { loc5, _ := NewLocation("192.168.1.100:8005") */ + /* database.AddFragment(frame, slice, loc1, 0) database.AddFragment(frame, slice, loc1, 1) database.AddFragment(frame, slice, loc1, 2) database.AddFragment(frame, slice, loc1, 3) database.AddFragment(frame, slice, loc1, 4) + */ fsi, _ := database.GetFrameSliceIntersect(frame, slice)