0dab4b7581
Implement Policer service that performs background work to check compliance with the placement policy for local objects in the container. In the initial implementation, the selection of the working queue of objects is simplified, and there is no transfer of the result to the replicator. Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
28 lines
718 B
Go
28 lines
718 B
Go
package policer
|
|
|
|
import (
|
|
"github.com/nspcc-dev/neofs-api-go/pkg/object"
|
|
"github.com/nspcc-dev/neofs-node/pkg/local_object_storage/localstore"
|
|
)
|
|
|
|
type jobQueue struct {
|
|
localStorage *localstore.Storage
|
|
}
|
|
|
|
func (q *jobQueue) Select(limit int) ([]*object.Address, error) {
|
|
// TODO: optimize the logic for selecting objects
|
|
// We can prioritize objects for migration, newly arrived objects, etc.
|
|
// It is recommended to make changes after updating the metabase
|
|
|
|
res := make([]*object.Address, 0, limit)
|
|
|
|
if err := q.localStorage.Iterate(nil, func(meta *localstore.ObjectMeta) bool {
|
|
res = append(res, meta.Head().Address())
|
|
|
|
return len(res) >= limit
|
|
}); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return res, nil
|
|
}
|