Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c7c1446c authored by Alex Buynytskyy's avatar Alex Buynytskyy Committed by Android (Google) Code Review
Browse files

Merge "More logging and better retry logic." into sc-dev

parents ca6b81c9 5ac55538
Loading
Loading
Loading
Loading
+6 −3
Original line number Original line Diff line number Diff line
@@ -2523,7 +2523,8 @@ std::optional<Milliseconds> IncrementalService::DataLoaderStub::needToBind() {
        now - mCurrentStatusTs <= Constants::bindingTimeout) {
        now - mCurrentStatusTs <= Constants::bindingTimeout) {
        LOG(INFO) << "Binding still in progress. "
        LOG(INFO) << "Binding still in progress. "
                  << (healthy ? "The DL is healthy/freshly bound, ok to retry for a few times."
                  << (healthy ? "The DL is healthy/freshly bound, ok to retry for a few times."
                              : "Already unhealthy, don't do anything.");
                              : "Already unhealthy, don't do anything.")
                  << " for storage " << mId;
        // Binding still in progress.
        // Binding still in progress.
        if (!healthy) {
        if (!healthy) {
            // Already unhealthy, don't do anything.
            // Already unhealthy, don't do anything.
@@ -2546,7 +2547,8 @@ std::optional<Milliseconds> IncrementalService::DataLoaderStub::needToBind() {
    const auto previousBindTs = mPreviousBindTs;
    const auto previousBindTs = mPreviousBindTs;
    mPreviousBindTs = now;
    mPreviousBindTs = now;


    const auto nonCrashingInterval = std::max(castToMs(now - previousBindTs), 100ms);
    const auto nonCrashingInterval =
            std::max(castToMs(now - previousBindTs - mPreviousBindDelay), 100ms);
    if (previousBindTs.time_since_epoch() == Clock::duration::zero() ||
    if (previousBindTs.time_since_epoch() == Clock::duration::zero() ||
        nonCrashingInterval > Constants::healthyDataLoaderUptime) {
        nonCrashingInterval > Constants::healthyDataLoaderUptime) {
        mPreviousBindDelay = 0ms;
        mPreviousBindDelay = 0ms;
@@ -2575,7 +2577,8 @@ bool IncrementalService::DataLoaderStub::bind() {
    const auto bindDelay = *maybeBindDelay;
    const auto bindDelay = *maybeBindDelay;
    if (bindDelay > 1s) {
    if (bindDelay > 1s) {
        LOG(INFO) << "Delaying bind to " << mParams.packageName << " by "
        LOG(INFO) << "Delaying bind to " << mParams.packageName << " by "
                  << bindDelay.count() / 1000 << "s";
                  << bindDelay.count() / 1000 << "s"
                  << " for storage " << mId;
    }
    }


    bool result = false;
    bool result = false;
+22 −1
Original line number Original line Diff line number Diff line
@@ -245,6 +245,7 @@ public:
        mId = mountId;
        mId = mountId;
        mListener = listener;
        mListener = listener;
        mDataLoader = mDataLoaderHolder;
        mDataLoader = mDataLoaderHolder;
        mBindDelayMs = bindDelayMs;
        *_aidl_return = true;
        *_aidl_return = true;
        if (mListener) {
        if (mListener) {
            mListener->onStatusChanged(mId, IDataLoaderStatusListener::DATA_LOADER_BOUND);
            mListener->onStatusChanged(mId, IDataLoaderStatusListener::DATA_LOADER_BOUND);
@@ -341,14 +342,18 @@ public:
            }
            }
            mDataLoader = nullptr;
            mDataLoader = nullptr;
        }
        }
        mBindDelayMs = -1;
        if (mListener) {
        if (mListener) {
            mListener->onStatusChanged(id, IDataLoaderStatusListener::DATA_LOADER_DESTROYED);
            mListener->onStatusChanged(id, IDataLoaderStatusListener::DATA_LOADER_DESTROYED);
        }
        }
        return binder::Status::ok();
        return binder::Status::ok();
    }
    }


    int bindDelayMs() const { return mBindDelayMs; }

private:
private:
    int mId;
    int mId = -1;
    int mBindDelayMs = -1;
    sp<IDataLoaderStatusListener> mListener;
    sp<IDataLoaderStatusListener> mListener;
    sp<IDataLoader> mDataLoader;
    sp<IDataLoader> mDataLoader;
    sp<IDataLoader> mDataLoaderHolder;
    sp<IDataLoader> mDataLoaderHolder;
@@ -604,11 +609,14 @@ public:
    MOCK_CONST_METHOD0(now, TimePoint());
    MOCK_CONST_METHOD0(now, TimePoint());


    void start() { ON_CALL(*this, now()).WillByDefault(Invoke(this, &MockClockWrapper::getClock)); }
    void start() { ON_CALL(*this, now()).WillByDefault(Invoke(this, &MockClockWrapper::getClock)); }

    template <class Delta>
    template <class Delta>
    void advance(Delta delta) {
    void advance(Delta delta) {
        mClock += delta;
        mClock += delta;
    }
    }


    void advanceMs(int deltaMs) { mClock += std::chrono::milliseconds(deltaMs); }

    TimePoint getClock() const { return mClock; }
    TimePoint getClock() const { return mClock; }


    TimePoint mClock = Clock::now();
    TimePoint mClock = Clock::now();
@@ -894,31 +902,38 @@ TEST_F(IncrementalServiceTest, testDataLoaderDestroyedAndDelayed) {
    ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _))
    ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _))
            .WillByDefault(Invoke(mDataLoaderManager,
            .WillByDefault(Invoke(mDataLoaderManager,
                                  &MockDataLoaderManager::bindToDataLoaderOkWith1sDelay));
                                  &MockDataLoaderManager::bindToDataLoaderOkWith1sDelay));
    mClock->advanceMs(mDataLoaderManager->bindDelayMs());
    mDataLoaderManager->setDataLoaderStatusDestroyed();
    mDataLoaderManager->setDataLoaderStatusDestroyed();


    ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _))
    ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _))
            .WillByDefault(Invoke(mDataLoaderManager,
            .WillByDefault(Invoke(mDataLoaderManager,
                                  &MockDataLoaderManager::bindToDataLoaderOkWith10sDelay));
                                  &MockDataLoaderManager::bindToDataLoaderOkWith10sDelay));
    mClock->advanceMs(mDataLoaderManager->bindDelayMs());
    mDataLoaderManager->setDataLoaderStatusDestroyed();
    mDataLoaderManager->setDataLoaderStatusDestroyed();


    ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _))
    ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _))
            .WillByDefault(Invoke(mDataLoaderManager,
            .WillByDefault(Invoke(mDataLoaderManager,
                                  &MockDataLoaderManager::bindToDataLoaderOkWith100sDelay));
                                  &MockDataLoaderManager::bindToDataLoaderOkWith100sDelay));
    mClock->advanceMs(mDataLoaderManager->bindDelayMs());
    mDataLoaderManager->setDataLoaderStatusDestroyed();
    mDataLoaderManager->setDataLoaderStatusDestroyed();


    ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _))
    ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _))
            .WillByDefault(Invoke(mDataLoaderManager,
            .WillByDefault(Invoke(mDataLoaderManager,
                                  &MockDataLoaderManager::bindToDataLoaderOkWith1000sDelay));
                                  &MockDataLoaderManager::bindToDataLoaderOkWith1000sDelay));
    mClock->advanceMs(mDataLoaderManager->bindDelayMs());
    mDataLoaderManager->setDataLoaderStatusDestroyed();
    mDataLoaderManager->setDataLoaderStatusDestroyed();


    ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _))
    ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _))
            .WillByDefault(Invoke(mDataLoaderManager,
            .WillByDefault(Invoke(mDataLoaderManager,
                                  &MockDataLoaderManager::bindToDataLoaderOkWith10000sDelay));
                                  &MockDataLoaderManager::bindToDataLoaderOkWith10000sDelay));
    // Try the reduced delay, just in case.
    mClock->advanceMs(mDataLoaderManager->bindDelayMs() / 2);
    mDataLoaderManager->setDataLoaderStatusDestroyed();
    mDataLoaderManager->setDataLoaderStatusDestroyed();


    ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _))
    ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _))
            .WillByDefault(Invoke(mDataLoaderManager,
            .WillByDefault(Invoke(mDataLoaderManager,
                                  &MockDataLoaderManager::bindToDataLoaderOkWith10000sDelay));
                                  &MockDataLoaderManager::bindToDataLoaderOkWith10000sDelay));
    mClock->advanceMs(mDataLoaderManager->bindDelayMs());
    mDataLoaderManager->setDataLoaderStatusDestroyed();
    mDataLoaderManager->setDataLoaderStatusDestroyed();
}
}


@@ -1012,31 +1027,37 @@ TEST_F(IncrementalServiceTest, testDataLoaderOnRestart) {
    ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _))
    ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _))
            .WillByDefault(Invoke(mDataLoaderManager,
            .WillByDefault(Invoke(mDataLoaderManager,
                                  &MockDataLoaderManager::bindToDataLoaderOkWith1sDelay));
                                  &MockDataLoaderManager::bindToDataLoaderOkWith1sDelay));
    mClock->advanceMs(mDataLoaderManager->bindDelayMs());
    mDataLoaderManager->setDataLoaderStatusDestroyed();
    mDataLoaderManager->setDataLoaderStatusDestroyed();


    ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _))
    ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _))
            .WillByDefault(Invoke(mDataLoaderManager,
            .WillByDefault(Invoke(mDataLoaderManager,
                                  &MockDataLoaderManager::bindToDataLoaderOkWith10sDelay));
                                  &MockDataLoaderManager::bindToDataLoaderOkWith10sDelay));
    mClock->advanceMs(mDataLoaderManager->bindDelayMs());
    mDataLoaderManager->setDataLoaderStatusDestroyed();
    mDataLoaderManager->setDataLoaderStatusDestroyed();


    ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _))
    ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _))
            .WillByDefault(Invoke(mDataLoaderManager,
            .WillByDefault(Invoke(mDataLoaderManager,
                                  &MockDataLoaderManager::bindToDataLoaderOkWith100sDelay));
                                  &MockDataLoaderManager::bindToDataLoaderOkWith100sDelay));
    mClock->advanceMs(mDataLoaderManager->bindDelayMs());
    mDataLoaderManager->setDataLoaderStatusDestroyed();
    mDataLoaderManager->setDataLoaderStatusDestroyed();


    ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _))
    ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _))
            .WillByDefault(Invoke(mDataLoaderManager,
            .WillByDefault(Invoke(mDataLoaderManager,
                                  &MockDataLoaderManager::bindToDataLoaderOkWith1000sDelay));
                                  &MockDataLoaderManager::bindToDataLoaderOkWith1000sDelay));
    mClock->advanceMs(mDataLoaderManager->bindDelayMs());
    mDataLoaderManager->setDataLoaderStatusDestroyed();
    mDataLoaderManager->setDataLoaderStatusDestroyed();


    ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _))
    ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _))
            .WillByDefault(Invoke(mDataLoaderManager,
            .WillByDefault(Invoke(mDataLoaderManager,
                                  &MockDataLoaderManager::bindToDataLoaderOkWith10000sDelay));
                                  &MockDataLoaderManager::bindToDataLoaderOkWith10000sDelay));
    mClock->advanceMs(mDataLoaderManager->bindDelayMs());
    mDataLoaderManager->setDataLoaderStatusDestroyed();
    mDataLoaderManager->setDataLoaderStatusDestroyed();


    ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _))
    ON_CALL(*mDataLoaderManager, bindToDataLoader(_, _, _, _, _))
            .WillByDefault(Invoke(mDataLoaderManager,
            .WillByDefault(Invoke(mDataLoaderManager,
                                  &MockDataLoaderManager::bindToDataLoaderOkWith10000sDelay));
                                  &MockDataLoaderManager::bindToDataLoaderOkWith10000sDelay));
    mClock->advanceMs(mDataLoaderManager->bindDelayMs());
    mDataLoaderManager->setDataLoaderStatusDestroyed();
    mDataLoaderManager->setDataLoaderStatusDestroyed();
}
}