From 3900b92927bb0343cf7282bf91e817f8cd44f827 Mon Sep 17 00:00:00 2001
From: Evgenii Stratonikov <e.stratonikov@yadro.com>
Date: Thu, 26 Dec 2024 14:12:35 +0300
Subject: [PATCH] Revert "[#1492] metabase: Ensure Unmarshal() is called on a
 cloned slice"

This reverts commit 8ed7a676d50e24489e2abeb5269d6eb3332df1f8.

Signed-off-by: Evgenii Stratonikov <e.stratonikov@yadro.com>
---
 pkg/local_object_storage/metabase/exists.go    |  3 +--
 pkg/local_object_storage/metabase/get.go       | 11 +++++------
 pkg/local_object_storage/metabase/iterators.go |  3 +--
 pkg/local_object_storage/metabase/list.go      |  4 ++--
 pkg/local_object_storage/metabase/put.go       |  3 +--
 5 files changed, 10 insertions(+), 14 deletions(-)

diff --git a/pkg/local_object_storage/metabase/exists.go b/pkg/local_object_storage/metabase/exists.go
index 3133c5480..962108a76 100644
--- a/pkg/local_object_storage/metabase/exists.go
+++ b/pkg/local_object_storage/metabase/exists.go
@@ -1,7 +1,6 @@
 package meta
 
 import (
-	"bytes"
 	"context"
 	"fmt"
 	"time"
@@ -227,7 +226,7 @@ func getSplitInfo(tx *bbolt.Tx, cnr cid.ID, key []byte) (*objectSDK.SplitInfo, e
 
 	splitInfo := objectSDK.NewSplitInfo()
 
-	err := splitInfo.Unmarshal(bytes.Clone(rawSplitInfo))
+	err := splitInfo.Unmarshal(rawSplitInfo)
 	if err != nil {
 		return nil, fmt.Errorf("unmarshal split info from root index: %w", err)
 	}
diff --git a/pkg/local_object_storage/metabase/get.go b/pkg/local_object_storage/metabase/get.go
index af274b245..615add1af 100644
--- a/pkg/local_object_storage/metabase/get.go
+++ b/pkg/local_object_storage/metabase/get.go
@@ -1,7 +1,6 @@
 package meta
 
 import (
-	"bytes"
 	"context"
 	"fmt"
 	"time"
@@ -112,7 +111,7 @@ func (db *DB) get(tx *bbolt.Tx, addr oid.Address, key []byte, checkStatus, raw b
 	// check in primary index
 	data := getFromBucket(tx, primaryBucketName(cnr, bucketName), key)
 	if len(data) != 0 {
-		return obj, obj.Unmarshal(bytes.Clone(data))
+		return obj, obj.Unmarshal(data)
 	}
 
 	data = getFromBucket(tx, ecInfoBucketName(cnr, bucketName), key)
@@ -123,13 +122,13 @@ func (db *DB) get(tx *bbolt.Tx, addr oid.Address, key []byte, checkStatus, raw b
 	// if not found then check in tombstone index
 	data = getFromBucket(tx, tombstoneBucketName(cnr, bucketName), key)
 	if len(data) != 0 {
-		return obj, obj.Unmarshal(bytes.Clone(data))
+		return obj, obj.Unmarshal(data)
 	}
 
 	// if not found then check in locker index
 	data = getFromBucket(tx, bucketNameLockers(cnr, bucketName), key)
 	if len(data) != 0 {
-		return obj, obj.Unmarshal(bytes.Clone(data))
+		return obj, obj.Unmarshal(data)
 	}
 
 	// if not found then check if object is a virtual
@@ -185,7 +184,7 @@ func getVirtualObject(tx *bbolt.Tx, cnr cid.ID, key []byte, raw bool) (*objectSD
 
 	child := objectSDK.New()
 
-	err = child.Unmarshal(bytes.Clone(data))
+	err = child.Unmarshal(data)
 	if err != nil {
 		return nil, fmt.Errorf("unmarshal child with parent: %w", err)
 	}
@@ -219,7 +218,7 @@ func getECInfoError(tx *bbolt.Tx, cnr cid.ID, data []byte) error {
 		objData := getFromBucket(tx, primaryBucketName(cnr, make([]byte, bucketKeySize)), key)
 		if len(objData) != 0 {
 			obj := objectSDK.New()
-			if err := obj.Unmarshal(bytes.Clone(objData)); err != nil {
+			if err := obj.Unmarshal(objData); err != nil {
 				return err
 			}
 			chunk := objectSDK.ECChunk{}
diff --git a/pkg/local_object_storage/metabase/iterators.go b/pkg/local_object_storage/metabase/iterators.go
index 0d438e102..9cccd7dad 100644
--- a/pkg/local_object_storage/metabase/iterators.go
+++ b/pkg/local_object_storage/metabase/iterators.go
@@ -1,7 +1,6 @@
 package meta
 
 import (
-	"bytes"
 	"context"
 	"errors"
 	"strconv"
@@ -130,7 +129,7 @@ func iteratePhyObjects(tx *bbolt.Tx, f func(cid.ID, oid.ID, *objectSDK.Object) e
 		}
 
 		return b.ForEach(func(k, v []byte) error {
-			if oid.Decode(k) == nil && obj.Unmarshal(bytes.Clone(v)) == nil {
+			if oid.Decode(k) == nil && obj.Unmarshal(v) == nil {
 				return f(cid, oid, obj)
 			}
 
diff --git a/pkg/local_object_storage/metabase/list.go b/pkg/local_object_storage/metabase/list.go
index 375d1cb1a..f488c3ced 100644
--- a/pkg/local_object_storage/metabase/list.go
+++ b/pkg/local_object_storage/metabase/list.go
@@ -248,7 +248,7 @@ func selectNFromBucket(bkt *bbolt.Bucket, // main bucket
 		}
 
 		var o objectSDK.Object
-		if err := o.Unmarshal(bytes.Clone(v)); err != nil {
+		if err := o.Unmarshal(v); err != nil {
 			return nil, nil, nil, err
 		}
 
@@ -423,7 +423,7 @@ func (db *DB) iterateOverObjectsInContainer(ctx context.Context, tx *bbolt.Tx, p
 		var ecInfo *objectcore.ECInfo
 		if prm.ObjectType == objectSDK.TypeRegular {
 			var o objectSDK.Object
-			if err := o.Unmarshal(bytes.Clone(v)); err != nil {
+			if err := o.Unmarshal(v); err != nil {
 				return err
 			}
 			isLinkingObj = isLinkObject(&o)
diff --git a/pkg/local_object_storage/metabase/put.go b/pkg/local_object_storage/metabase/put.go
index 16918c4d9..5e1bbfe9e 100644
--- a/pkg/local_object_storage/metabase/put.go
+++ b/pkg/local_object_storage/metabase/put.go
@@ -1,7 +1,6 @@
 package meta
 
 import (
-	"bytes"
 	"context"
 	"encoding/binary"
 	"errors"
@@ -320,7 +319,7 @@ func updateSplitInfoIndex(tx *bbolt.Tx, objKey []byte, cnr cid.ID, bucketName []
 			return si.Marshal()
 		default:
 			oldSI := objectSDK.NewSplitInfo()
-			if err := oldSI.Unmarshal(bytes.Clone(old)); err != nil {
+			if err := oldSI.Unmarshal(old); err != nil {
 				return nil, err
 			}
 			si = util.MergeSplitInfo(si, oldSI)