Skip to content
This repository was archived by the owner on Jun 27, 2023. It is now read-only.

Commit 9e789b7

Browse files
committed
check dir upgrade even in RemoveChild case
1 parent 329949b commit 9e789b7

File tree

1 file changed

+34
-9
lines changed

1 file changed

+34
-9
lines changed

io/directory.go

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,9 @@ func (d *BasicDirectory) needsToSwitchToHAMTDir(name string, nodeToAdd ipld.Node
214214
}
215215
operationSizeChange -= estimatedLinkSize(name, entryToRemove.Cid)
216216
}
217-
operationSizeChange += estimatedLinkSize(name, nodeToAdd.Cid())
217+
if nodeToAdd != nil {
218+
operationSizeChange += estimatedLinkSize(name, nodeToAdd.Cid())
219+
}
218220

219221
return d.estimatedSize + operationSizeChange >= HAMTShardingSize, nil
220222
}
@@ -613,15 +615,38 @@ func (d *UpgradeableDirectory) RemoveChild(ctx context.Context, name string) err
613615
if err != nil {
614616
return err
615617
}
616-
617-
if switchToBasic {
618-
basicDir, err := hamtDir.switchToBasic(ctx)
619-
if err != nil {
620-
return err
621-
}
622-
d.Directory = basicDir
618+
if !switchToBasic {
619+
return hamtDir.RemoveChild(ctx, name)
620+
}
621+
basicDir, err := hamtDir.switchToBasic(ctx)
622+
if err != nil {
623+
return err
623624
}
625+
err = basicDir.RemoveChild(ctx, name)
626+
if err != nil {
627+
return err
628+
}
629+
d.Directory = basicDir
630+
return nil
624631
}
625632

626-
return d.Directory.RemoveChild(ctx, name)
633+
// BasicDirectory
634+
basicDir := d.Directory.(*BasicDirectory)
635+
switchToHAMT, err := basicDir.needsToSwitchToHAMTDir(name, nil)
636+
if err != nil {
637+
return err
638+
}
639+
if !switchToHAMT {
640+
return basicDir.RemoveChild(ctx, name)
641+
}
642+
hamtDir, err = basicDir.SwitchToSharding(ctx)
643+
if err != nil {
644+
return err
645+
}
646+
hamtDir.RemoveChild(ctx, name)
647+
if err != nil {
648+
return err
649+
}
650+
d.Directory = hamtDir
651+
return nil
627652
}

0 commit comments

Comments
 (0)