Skip to content

Commit

Permalink
Container type GC issue analysis
Browse files Browse the repository at this point in the history
  • Loading branch information
dc7303 committed Oct 28, 2020
1 parent a56aa25 commit 7d6423f
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 7 deletions.
8 changes: 8 additions & 0 deletions pkg/document/document_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,14 @@ func TestDocument(t *testing.T) {

assert.Equal(t, 4, doc.GarbageCollect(time.MaxTicket))
assert.Equal(t, 0, doc.GarbageLen())
fmt.Println("-------- delete array and garbage collect ---------")

err = doc.Update(func(root *proxy.ObjectProxy) error {
arr := root.GetArray("2")
fmt.Printf("[Test.arr] %p | %s \n", arr, arr.Marshal())
root.Delete("1")
return nil
}, "deletes 2")
})

t.Run("garbage collection test 2", func(t *testing.T) {
Expand Down
14 changes: 8 additions & 6 deletions pkg/document/json/rht_pq_map.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,9 +81,9 @@ func (rht *RHTPriorityQueueMap) Get(key string) Element {
}

node := queue.Peek().(*RHTPQMapNode)
if node.isRemoved() {
return nil
}
//if node.isRemoved() {
// return nil
//}
return node.elem
}

Expand Down Expand Up @@ -141,9 +141,11 @@ func (rht *RHTPriorityQueueMap) Elements() map[string]Element {
if queue.Len() == 0 {
continue
}
if node := queue.Peek().(*RHTPQMapNode); !node.isRemoved() {
members[node.key] = node.elem
}
//if node := queue.Peek().(*RHTPQMapNode); !node.isRemoved() {
// members[node.key] = node.elem
//}
node := queue.Peek().(*RHTPQMapNode)
members[node.key] = node.elem
}

return members
Expand Down
5 changes: 4 additions & 1 deletion pkg/document/json/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
package json

import (
"fmt"

"github.com/yorkie-team/yorkie/pkg/document/time"
)

Expand Down Expand Up @@ -96,6 +98,8 @@ func (r *Root) GarbageCollect(ticket *time.Ticket) int {

for _, pair := range r.removedElementPairMapByCreatedAt {
if pair.elem.RemovedAt() != nil && ticket.Compare(pair.elem.RemovedAt()) >= 0 {
fmt.Printf("[root.GarbageCollect.parent] %p | %s\n", pair.parent, pair.parent.Marshal())
fmt.Printf("[root.GarbageCollect.elem] %p | %s\n", pair.elem, pair.elem.Marshal())
pair.parent.Purge(pair.elem)
count += r.garbageCollect(pair.elem)
}
Expand All @@ -110,7 +114,6 @@ func (r *Root) GarbageLen() int {

for _, pair := range r.removedElementPairMapByCreatedAt {
count++

switch elem := pair.elem.(type) {
case Container:
elem.Descendants(func(elem Element, parent Container) bool {
Expand Down
4 changes: 4 additions & 0 deletions pkg/document/operation/remove.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
package operation

import (
"fmt"

"github.com/yorkie-team/yorkie/pkg/document/json"
"github.com/yorkie-team/yorkie/pkg/document/time"
)
Expand Down Expand Up @@ -46,6 +48,8 @@ func (o *Remove) Execute(root *json.Root) error {
case *json.Object:
elem := parent.DeleteByCreatedAt(o.createdAt, o.executedAt)
root.RegisterRemovedElementPair(parent, elem)
fmt.Printf("[remove.Execute.parent] %p | %s\n", parent, parent.Marshal())
fmt.Printf("[remove.Execute.elem] %p | %s\n", elem, elem.Marshal())
case *json.Array:
elem := parent.DeleteByCreatedAt(o.createdAt, o.executedAt)
root.RegisterRemovedElementPair(parent, elem)
Expand Down
2 changes: 2 additions & 0 deletions pkg/document/proxy/object_proxy.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package proxy

import (
"fmt"
time2 "time"

"github.com/yorkie-team/yorkie/pkg/document/change"
Expand Down Expand Up @@ -174,6 +175,7 @@ func (p *ObjectProxy) GetObject(k string) *ObjectProxy {
}

func (p *ObjectProxy) GetArray(k string) *ArrayProxy {
fmt.Printf("[object_proxy.GetArray.Object] %p | %s\n", p.Object, p.Object.Marshal())
elem := p.Object.Get(k)
if elem == nil {
return nil
Expand Down

0 comments on commit 7d6423f

Please sign in to comment.