Skip to content

Commit 7c44628

Browse files
authored
Fix Activation (#583)
* Fix Activation Signed-off-by: ortyomka <[email protected]> * Fix graphsync segfault Use getMaxProveCommitDuration instead of const Signed-off-by: ortyomka <[email protected]>
1 parent cf0699a commit 7c44628

File tree

8 files changed

+61
-28
lines changed

8 files changed

+61
-28
lines changed

core/miner/impl/miner_impl.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,9 @@ namespace fc::miner {
8585
std::shared_ptr<PreCommitPolicy> precommit_policy =
8686
std::make_shared<BasicPreCommitPolicy>(
8787
api,
88-
deadline_info.period_start % kWPoStProvingPeriod,
89-
kMaxSectorExpirationExtension - 2 * kWPoStProvingPeriod);
88+
2 * kWPoStProvingPeriod,
89+
std::chrono::seconds(kMaxSectorExpirationExtension
90+
* kEpochDurationSeconds));
9091
std::shared_ptr<FeeConfig> fee_config = std::make_shared<FeeConfig>();
9192
fee_config->max_precommit_batch_gas_fee.base = {
9293
0}; // TODO(ortyomka): config loading;

core/miner/storage_fsm/impl/basic_precommit_policy.cpp

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
namespace fc::mining {
99
using vm::actor::builtin::types::miner::kMaxSectorExpirationExtension;
10+
using vm::actor::builtin::types::miner::kMinSectorExpiration;
1011
using vm::actor::builtin::types::miner::kWPoStProvingPeriod;
1112

1213
outcome::result<ChainEpoch> BasicPreCommitPolicy::expiration(
@@ -39,17 +40,34 @@ namespace fc::mining {
3940
end = epoch + duration_;
4041
}
4142

42-
*end += kWPoStProvingPeriod - (*end % kWPoStProvingPeriod)
43-
+ proving_boundary_ - 1;
43+
const auto min_exp = epoch + kMinSectorExpiration + kWPoStProvingPeriod;
44+
45+
if (end < min_exp) {
46+
end = min_exp;
47+
}
4448

4549
return *end;
4650
}
4751

48-
BasicPreCommitPolicy::BasicPreCommitPolicy(std::shared_ptr<FullNodeApi> api,
49-
ChainEpoch proving_boundary,
50-
ChainEpoch duration)
52+
BasicPreCommitPolicy::BasicPreCommitPolicy(
53+
std::shared_ptr<FullNodeApi> api,
54+
ChainEpoch proving_boundary,
55+
std::chrono::seconds sector_lifetime)
5156
: api_(std::move(api)),
5257
proving_boundary_(proving_boundary),
53-
duration_(duration),
54-
logger_(common::createLogger("basic pre commit policy")) {}
58+
logger_(common::createLogger("basic pre commit policy")) {
59+
ChainEpoch sector_lifetime_ =
60+
std::ceil(sector_lifetime.count() / double(kEpochDurationSeconds));
61+
if (sector_lifetime_ == 0) {
62+
sector_lifetime_ = kMaxSectorExpirationExtension;
63+
}
64+
65+
if (sector_lifetime_ < kMinSectorExpiration) {
66+
duration_ = kMinSectorExpiration;
67+
} else if (sector_lifetime_ > kMaxSectorExpirationExtension) {
68+
duration_ = kMaxSectorExpirationExtension;
69+
} else {
70+
duration_ = sector_lifetime_ - proving_boundary_;
71+
}
72+
}
5573
} // namespace fc::mining

core/miner/storage_fsm/impl/basic_precommit_policy.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ namespace fc::mining {
1616
public:
1717
BasicPreCommitPolicy(std::shared_ptr<FullNodeApi> api,
1818
ChainEpoch proving_boundary,
19-
ChainEpoch duration);
19+
std::chrono::seconds sector_lifetime);
2020

2121
outcome::result<ChainEpoch> expiration(
2222
gsl::span<const types::Piece> pieces) override;

core/miner/storage_fsm/impl/precommit_batcher_impl.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ namespace fc::mining {
4848

4949
~PreCommitEntry() = default;
5050

51-
PreCommitEntry &operator=(const PreCommitEntry &other) = default;
51+
PreCommitEntry &operator=(const PreCommitEntry &other) noexcept = default;
5252
PreCommitEntry &operator=(PreCommitEntry &&) noexcept = default;
5353

5454
TokenAmount deposit{};

core/miner/storage_fsm/impl/sealing_impl.cpp

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,11 @@ namespace fc::mining {
4545
using vm::actor::builtin::types::market::deal_info_manager::
4646
DealInfoManagerImpl;
4747
using vm::actor::builtin::types::miner::kChainFinality;
48+
using vm::actor::builtin::types::miner::kMaxPreCommitRandomnessLookback;
49+
using vm::actor::builtin::types::miner::kMaxProveCommitDuration;
50+
using vm::actor::builtin::types::miner::kMaxSectorExpirationExtension;
4851
using vm::actor::builtin::types::miner::kMinSectorExpiration;
52+
using vm::actor::builtin::types::miner::kPreCommitChallengeDelay;
4953
using vm::actor::builtin::v0::miner::PreCommitSector;
5054
using vm::actor::builtin::v0::miner::ProveCommitSector;
5155

@@ -1137,14 +1141,22 @@ namespace fc::mining {
11371141
OUTCOME_TRY(seal_duration,
11381142
checks::getMaxProveCommitDuration(network, info));
11391143
OUTCOME_TRY(policy_expiration, policy_->expiration(info->pieces));
1140-
const ChainEpoch static_expiration =
1141-
head->epoch() + seal_duration + kMinSectorExpiration + kChainFinality
1142-
+ gsl::narrow<ChainEpoch>(kEpochsInDay);
1143-
const auto expiration =
1144-
std::min<ChainEpoch>(policy_expiration, static_expiration);
1144+
const auto min_expiration = info->ticket_epoch
1145+
+ kMaxPreCommitRandomnessLookback
1146+
+ seal_duration + kMinSectorExpiration;
1147+
1148+
if (policy_expiration < min_expiration) {
1149+
policy_expiration = min_expiration;
1150+
}
1151+
1152+
const auto max_expiration = head->epoch() + kPreCommitChallengeDelay
1153+
+ kMaxSectorExpirationExtension;
1154+
if (policy_expiration > max_expiration) {
1155+
policy_expiration = max_expiration;
1156+
}
11451157

11461158
SectorPreCommitInfo params;
1147-
params.expiration = expiration;
1159+
params.expiration = policy_expiration;
11481160
params.sector = info->sector_number;
11491161
params.registered_proof = info->sector_type;
11501162
params.sealed_cid = info->comm_r.get();
@@ -1281,7 +1293,6 @@ namespace fc::mining {
12811293
precommit_params->deposit,
12821294
precommit_params->info,
12831295
[=](const outcome::result<CID> &maybe_cid) -> void {
1284-
logger_->info("SUBMIT");
12851296
if (maybe_cid.has_error()) {
12861297
logger_->error("submitting message to precommit batcher: {}",
12871298
maybe_cid.error().message());

core/storage/ipfs/graphsync/impl/network/peer_context.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,9 @@ namespace fc::storage::ipfs::graphsync {
245245
}
246246
}
247247

248-
void PeerContext::closeStream(const StreamPtr &stream,
248+
// here stream should copy, because streams_.erase will reset original one
249+
// NOLINTNEXTLINE
250+
void PeerContext::closeStream(StreamPtr stream,
249251
ResponseStatusCode status) {
250252
auto it = streams_.find(stream);
251253
if (it == streams_.end()) {

core/storage/ipfs/graphsync/impl/network/peer_context.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ namespace fc::storage::ipfs::graphsync {
120120
/// Closes a stream
121121
/// \param stream libp2p stream
122122
/// \param status close reason
123-
void closeStream(const StreamPtr &stream, ResponseStatusCode status);
123+
void closeStream(StreamPtr stream, ResponseStatusCode status);
124124

125125
/// Response callback, forwarded to GraphsyncImpl
126126
/// \param response response wire protocol object

test/core/miner/precommit_policy_test.cpp

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,23 @@ namespace fc::mining {
1717
using primitives::tipset::TipsetCPtr;
1818
using primitives::tipset::TipsetError;
1919
using types::DealInfo;
20+
using vm::actor::builtin::types::miner::kMinSectorExpiration;
2021
using vm::actor::builtin::types::miner::kWPoStProvingPeriod;
2122

2223
class PreCommitPolicyTest : public testing::Test {
2324
protected:
2425
virtual void SetUp() {
2526
api_ = std::make_shared<FullNodeApi>();
2627

27-
duration_ = 1;
28-
proving_boundary_ = 2;
28+
sector_lifetime_ = std::chrono::seconds(30);
29+
proving_boundary_ = 100;
2930

3031
precommit_policy_ = std::make_shared<BasicPreCommitPolicy>(
31-
api_, proving_boundary_, duration_);
32+
api_, proving_boundary_, sector_lifetime_);
3233
}
3334

3435
std::shared_ptr<FullNodeApi> api_;
35-
ChainEpoch duration_;
36+
std::chrono::seconds sector_lifetime_;
3637
ChainEpoch proving_boundary_;
3738
std::shared_ptr<PreCommitPolicy> precommit_policy_;
3839
};
@@ -52,7 +53,7 @@ namespace fc::mining {
5253
return outcome::success(tipset);
5354
};
5455

55-
auto result = block.height + kWPoStProvingPeriod + proving_boundary_ - 1;
56+
auto result = block.height + kMinSectorExpiration + kWPoStProvingPeriod;
5657

5758
EXPECT_OUTCOME_EQ(precommit_policy_->expiration({}), result);
5859
}
@@ -73,7 +74,8 @@ namespace fc::mining {
7374
};
7475

7576
DealInfo deal1;
76-
deal1.deal_schedule.end_epoch = block.height - 1;
77+
deal1.deal_schedule.end_epoch =
78+
block.height + kMinSectorExpiration + kWPoStProvingPeriod + 2;
7779
PieceInfo piece1;
7880
piece1.cid = "010001020002"_cid;
7981
DealInfo deal2;
@@ -82,10 +84,9 @@ namespace fc::mining {
8284
{.piece = piece1, .deal_info = deal1},
8385
{.piece = {}, .deal_info = deal2}};
8486

85-
auto result = block.height + kWPoStProvingPeriod + proving_boundary_ - 1;
8687
EXPECT_OUTCOME_EQ(
8788
precommit_policy_->expiration(gsl::span<const types::Piece>(pieces)),
88-
result);
89+
deal1.deal_schedule.end_epoch);
8990
}
9091

9192
/**

0 commit comments

Comments
 (0)