You need to enable JavaScript to run this app.
Torch Object Storage

Torch Object Storage

Copy page
Download PDF
Manage Bucket Configuration
Managing Mirroring Rules (C++ SDK)
Copy page
Download PDF
Managing Mirroring Rules (C++ SDK)
Mirror-based back-to-origin (mirroring) is primarily used in scenarios involving seamless data migration to TOS. For example, when your web service is already running on a self-built origin server or other cloud products and you need to migrate it to TOS, you can use a mirroring rule during the migration process to retrieve some data that has not yet been migrated to TOS. This ensures the normal operation of the service throughout the migration.​
Configure mirroring rules​
warning​
  • To configure mirroring rules for a bucket, you must be the bucket owner.​
  • A bucket supports the creation of only one back-to-origin rule.​
  • Mirroring supports objects up to a maximum size of 5 GiB. If you need to request objects larger than 5 GiB, please use the range download feature.​
  • The maximum supported object size for redirect-based back-to-origin is 300 GiB.​
Sample code​
The following code is used to set the mirroring rule for the specified bucket examplebucket.​
​
#include "TosClientV2.h"​
using namespace VolcengineTos;​
​
int main(void){​
​
​
std::string region = "Your Region";​
std::string accessKey = std::getenv("TOS_ACCESS_KEY");​
std::string secretKey = std::getenv("TOS_SECRET_KEY");​
​
std::string bucketName = "examplebucket";​
​
​
InitializeClient();​
​
TosClientV2 client(region, accessKey, secretKey);​
​
​
PutBucketMirrorBackInput input(bucketName);​
​
MirrorBackRule rule1;​
​
auto condition = rule1.getCondition();​
condition.setHttpCode(404);​
rule1.setCondition(condition);​
​
​
auto redirect = Redirect();​
​
redirect.setRedirectType(RedirectType::RedirectMirror);​
​
SourceEndpoint endpoint;​
endpoint.setPrimary({"https://www.example.com/"});​
endpoint.setFollower({"https://www.example.com/"});​
PublicSource publicSource(endpoint);​
redirect.setPublicSource(publicSource);​
​
​
redirect.setPassQuery(true);​
​
redirect.setFollowRedirect(true);​
​
redirect.setFetchSourceOnRedirect(true);​
​
​
MirrorHeader mirrorHeaders;​
mirrorHeaders.setPassAll(false);​
​
mirrorHeaders.setPass({"header-1", "header-2"});​
​
mirrorHeaders.setRemove({"header-3", "header-4"});​
redirect.setMirrorHeader(mirrorHeaders);​
​
​
std::vector<MirrorBackRule> rules{rule1};​
input.setRules(rules);​
​
auto output = client.putBucketMirrorBack(input);​
if (!output.isSuccess()) {​
​
std::cout << "PutBucketMirrorBack failed." << output.error().String() << std::endl;​
​
CloseClient();​
return -1;​
}​
std::cout << "PutBucketMirrorBack success." << std::endl;​
​
​
CloseClient();​
return 0;​
}​
​
Retrieve mirroring rules​
warning​
To retrieve the mirroring rules for a bucket, you must be the bucket owner.​
Sample code​
The following code is used to obtain the mirroring rules for the specified bucket examplebucket.​
​
#include "TosClientV2.h"​
using namespace VolcengineTos;​
​
int main(void){​
​
​
std::string region = "Your Region";​
std::string accessKey = std::getenv("TOS_ACCESS_KEY");​
std::string secretKey = std::getenv("TOS_SECRET_KEY");​
​
std::string bucketName = "examplebucket";​
​
​
InitializeClient();​
​
TosClientV2 client(region, accessKey, secretKey);​
​
​
GetBucketMirrorBackInput input(bucketName);​
auto output = client.getBucketMirrorBack(input);​
if (!output.isSuccess()) {​
​
std::cout << "GetBucketMirrorBack failed." << output.error().String() << std::endl;​
​
CloseClient();​
return -1;​
}​
​
​
auto mirrorBackRules= output.result().getRules();​
for (auto& rule : mirrorBackRules){​
​
std::cout << "rule:" << rule.getId() << std::endl;​
​
​
auto conditon = rule.getCondition();​
std::cout << "http code conditon:" << conditon.getHttpCode() << std::endl;​
​
​
auto redirect = rule.getRedirect();​
std::cout << "redirect:" << redirect.getStringFormatRedirectType() << "," << redirect.isFetchSourceOnRedirect() << "," <<​
redirect.isPassQuery() << "," << redirect.isFollowRedirect() << std::endl;​
​
auto mirrorHeader = redirect.getMirrorHeader();​
std::cout << "redirect-mirrorHeader:" << mirrorHeader.isPassAll() << std::endl;​
std::cout << "redirect-mirrorHeader-pass:" << std::endl;​
for(auto& pass : mirrorHeader.getPass()){​
std::cout << pass << std::endl;​
}​
std::cout << "redirect-mirrorHeader-remove:" << std::endl;​
for(auto& remove : mirrorHeader.getRemove()){​
std::cout << remove << std::endl;​
}​
​
auto publicSource = redirect.getPublicSource();​
auto sourceEndpoint = publicSource.getSourceEndpoint();​
std::cout << "redirect-publicSource-sourceEndpoint:" << std::endl;​
std::cout << "redirect-publicSource-sourceEndpoint-primary:" << std::endl;​
for(auto& primary : sourceEndpoint.getPrimary()){​
std::cout << primary << std::endl;​
}​
std::cout << "redirect-publicSource-sourceEndpoint-follower:" << std::endl;​
for(auto& follower : sourceEndpoint.getFollower()){​
std::cout << follower << std::endl;​
}​
}​
​
​
CloseClient();​
return 0;​
}​
​
Delete mirroring rules​
warning​
To delete the mirroring rule for a bucket, you must be the bucket owner.​
Sample code​
The following code is used to delete the mirroring rule for the specified bucket examplebucket.​
​
#include "TosClientV2.h"​
using namespace VolcengineTos;​
​
int main(void){​
​
std::string region = "Your Region";​
std::string accessKey = std::getenv("TOS_ACCESS_KEY");​
std::string secretKey = std::getenv("TOS_SECRET_KEY");​
​
std::string bucketName = "examplebucket";​
​
​
InitializeClient();​
​
TosClientV2 client(region, accessKey, secretKey);​
​
​
DeleteBucketMirrorBackInput input(bucketName);​
auto output = client.deleteBucketMirrorBack(input);​
if (!output.isSuccess()) {​
​
std::cout << "DeleteBucketMirrorBack failed." << output.error().String() << std::endl;​
​
CloseClient();​
return -1;​
}​
std::cout << "DeleteBucketMirrorBack success." << std::endl;​
​
CloseClient();​
return 0;​
}​
​
Relevant documentation​
For more information about mirroring, see Configuring back-to-origin rules.​
Last updated: 2026.08.07 17:39:01