@@ -599,32 +599,15 @@ func (c *cfg) getContainerNodesFromNetworkMap(networkMap *netmapsdk.NetMap, cnrI
599
599
return
600
600
}
601
601
602
- func (c * cfg ) getContainerNodesAtEpoch (cnrID cid.ID , epoch uint64 ) (
603
- nodeSets [][]netmapsdk.NodeInfo ,
604
- storagePolicy netmapsdk.PlacementPolicy ,
605
- networkMap * netmapsdk.NetMap ,
606
- err error ,
607
- ) {
608
- networkMap , err = c .netMapSource .GetNetMapByEpoch (epoch )
609
- if err != nil {
610
- err = fmt .Errorf ("read network map by epoch: %w" , err )
611
- return
612
- }
613
-
614
- nodeSets , storagePolicy , err = c .getContainerNodesFromNetworkMap (networkMap , cnrID )
615
-
616
- return
617
- }
618
-
619
602
// GetContainerNodesAtEpoch reads storage policy of the referenced container
620
603
// from the underlying container storage, reads network map at the specified
621
604
// epoch from the underlying storage, applies the storage policy to it and
622
605
// returns sets of selected storage nodes.
623
606
//
624
607
// GetContainerNodesAtEpoch implements [searchsvc.Node].
625
608
func (c * cfg ) GetContainerNodesAtEpoch (cnr cid.ID , epoch uint64 ) ([][]netmapsdk.NodeInfo , error ) {
626
- nodeSets , _ , _ , err := c .getContainerNodesAtEpoch (cnr , epoch )
627
- return nodeSets , err
609
+ cnrNodes , _ , err := c .cfgObject . containerNodesBuilder . getForEpoch (cnr , epoch )
610
+ return cnrNodes . nodeSets , err
628
611
}
629
612
630
613
// IsLocalPublicKey implements [searchsvc.Node], [getsvc.Node].
@@ -640,60 +623,40 @@ func (c *cfg) IsLocalPublicKey(bPubKey []byte) bool {
640
623
//
641
624
// GetObjectNodesAtEpoch implements [getsvc.Node].
642
625
func (c * cfg ) GetObjectNodesAtEpoch (addr oid.Address , epoch uint64 ) ([][]netmapsdk.NodeInfo , []uint32 , error ) {
643
- nodeLists , storagePolicy , networkMap , err := c .getContainerNodesAtEpoch ( addr . Container () , epoch )
626
+ cnrNodes , err := c .cfgObject . containerNodesBuilder . getForObjectAtEpoch ( addr , epoch )
644
627
if err != nil {
645
628
return nil , nil , err
646
629
}
647
630
648
- nodeLists , err = networkMap .PlacementVectors (nodeLists , addr .Object ())
649
- if err != nil {
650
- return nil , nil , fmt .Errorf ("apply object's storage policy to the network map: %w" , err )
651
- }
652
-
653
- primaryNums := make ([]uint32 , storagePolicy .NumberOfReplicas ())
654
- for i := range primaryNums {
655
- primaryNums [i ] = storagePolicy .ReplicaNumberByIndex (i )
656
- }
657
-
658
- return nodeLists , primaryNums , nil
631
+ return cnrNodes .nodeSets , cnrNodes .primaryNodesNums , nil
659
632
}
660
633
661
634
// TODO: docs
662
635
func (c * cfg ) ObjectStoragePolicyForContainer (cnrID cid.ID ) (putsvc.ObjectStoragePolicy , error ) {
663
- networkMap , err := netmap .GetLatestNetworkMap (c .netMapSource )
664
- if err != nil {
665
- return nil , fmt .Errorf ("read current network map: %w" , err )
666
- }
667
-
668
- nodeSets , storagePolicy , err := c .getContainerNodesFromNetworkMap (networkMap , cnrID )
636
+ cnrNodes , networkMap , cache , err := c .cfgObject .containerNodesBuilder ._getForEpoch (cnrID , 0 )
669
637
if err != nil {
670
- return nil , fmt .Errorf ("get storage nodes for the container in the current network map: %w" , err )
671
- }
672
-
673
- primaryNodeNums := make ([]uint32 , storagePolicy .NumberOfReplicas ())
674
- for i := range primaryNodeNums {
675
- primaryNodeNums [i ] = storagePolicy .ReplicaNumberByIndex (i )
638
+ return nil , err
676
639
}
677
640
678
- return containerStoragePolicy {
679
- networkMap : networkMap ,
680
- nodeSets : nodeSets ,
681
- primaryNodeNums : primaryNodeNums ,
641
+ return & containerStoragePolicy {
642
+ networkMap : networkMap ,
643
+ cnrNodes : cnrNodes ,
644
+ cache : cache ,
682
645
}, nil
683
646
}
684
647
685
648
type containerStoragePolicy struct {
686
- networkMap * netmapsdk.NetMap
687
- nodeSets [][]netmapsdk. NodeInfo
688
- primaryNodeNums [] uint32
649
+ networkMap * netmapsdk.NetMap
650
+ cnrNodes containerNodes
651
+ cache * containerNodesCacheItem
689
652
}
690
653
691
654
// TODO: docs
692
- func (x containerStoragePolicy ) StorageNodesForObject (obj oid.ID ) ([][]netmapsdk.NodeInfo , []uint32 , error ) {
693
- nodeLists , err := x . networkMap . PlacementVectors ( x . nodeSets , obj )
655
+ func (x * containerStoragePolicy ) StorageNodesForObject (obj oid.ID ) ([][]netmapsdk.NodeInfo , []uint32 , error ) {
656
+ nodeLists , err := sortContainerNodesForObjectAtEpoch ( x . cnrNodes . nodeSets , x . networkMap , x . cache , obj )
694
657
if err != nil {
695
- return nil , nil , fmt . Errorf ( "sort container nodes for the object: %w" , err )
658
+ return nil , nil , err
696
659
}
697
660
698
- return nodeLists , x .primaryNodeNums , nil
661
+ return nodeLists , x .cnrNodes . primaryNodesNums , nil
699
662
}
0 commit comments