VirtualBox

Changeset 23703 in vbox


Ignore:
Timestamp:
Oct 12, 2009 3:34:36 PM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
53419
Message:

Main,++: Added MachineState_MigratingFrom for use during startup on the migration target.

Location:
trunk/src/VBox
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageInfo.cpp

    r23689 r23703  
    397397        case MachineState_Restoring:
    398398            pszState = "restoring";
     399            break;
     400        case MachineState_MigratingFrom:
     401            if (details == VMINFO_MACHINEREADABLE)
     402                pszState = "migratingfrom";
     403            else
     404                pszState = "migrating from";
    399405            break;
    400406        default:
  • trunk/src/VBox/Frontends/VBoxSDL/VBoxSDL.cpp

    r23643 r23703  
    605605            case MachineState_Running:             return "Running";
    606606            case MachineState_Restoring:           return "Restoring";
     607            case MachineState_MigratingFrom:       return "MigratingFrom";
    607608            case MachineState_Starting:            return "Starting";
    608609            case MachineState_PoweredOff:          return "PoweredOff";
     
    20172018        if (    rc == S_OK
    20182019            &&  (   machineState == MachineState_Starting
    2019                  || machineState == MachineState_Restoring))
     2020                 || machineState == MachineState_Restoring
     2021                 || machineState == MachineState_MigratingFrom)
     2022            )
    20202023        {
    20212024            /*
     
    21112114    } while (   rc == S_OK
    21122115             && (   machineState == MachineState_Starting
    2113                  || machineState == MachineState_Restoring));
     2116                 || machineState == MachineState_Restoring
     2117                 || machineState == MachineState_MigratingFrom)
     2118            );
    21142119
    21152120    /* kill the timer again */
     
    42094214                                " - Restoring...");
    42104215            }
     4216            else if (machineState == MachineState_MigratingFrom)
     4217            {
     4218                ULONG cPercentNow;
     4219                HRESULT rc = gProgress->COMGETTER(Percent)(&cPercentNow);
     4220                if (SUCCEEDED(rc))
     4221                    RTStrPrintf(szTitle + strlen(szTitle), sizeof(szTitle) - strlen(szTitle),
     4222                                " - Migrating %d%%...", (int)cPercentNow);
     4223                else
     4224                    RTStrPrintf(szTitle + strlen(szTitle), sizeof(szTitle) - strlen(szTitle),
     4225                                " - Migrating...");
     4226            }
    42114227            /* ignore other states, we could already be in running or aborted state */
    42124228            break;
  • trunk/src/VBox/Frontends/VirtualBox/src/VBoxConsoleView.cpp

    r23643 r23703  
    41944194         mLastState == KMachineState_Paused ||
    41954195         mLastState == KMachineState_Restoring ||
     4196         mLastState == KMachineState_MigratingFrom ||
    41964197         mLastState == KMachineState_Saving))
    41974198        updateDockIcon();
  • trunk/src/VBox/Frontends/VirtualBox/src/VBoxGlobal.cpp

    r23643 r23703  
    26422642    mMachineStates [KMachineState_Saving] =     tr ("Saving", "MachineState");
    26432643    mMachineStates [KMachineState_Restoring] =  tr ("Restoring", "MachineState");
     2644    mMachineStates [KMachineState_MigratingFrom] = tr ("Migrating From", "MachineState");
    26442645    mMachineStates [KMachineState_Discarding] = tr ("Discarding", "MachineState");
    26452646    mMachineStates [KMachineState_SettingUp] =  tr ("Setting Up", "MachineState");
     
    46114612        {KMachineState_Saving, ":/state_saving_16px.png"},
    46124613        {KMachineState_Restoring, ":/state_restoring_16px.png"},
     4614        {KMachineState_MigratingFrom, ":/state_restoring_16px.png"}, /** @todo Live Migration: New icon? (not really important) */
    46134615        {KMachineState_Discarding, ":/state_discarding_16px.png"},
    46144616        {KMachineState_SettingUp, ":/settings_16px.png"},
     
    46324634    mVMStateColors.insert (KMachineState_Saving,        new QColor (Qt::green));
    46334635    mVMStateColors.insert (KMachineState_Restoring,     new QColor (Qt::green));
     4636    mVMStateColors.insert (KMachineState_MigratingFrom, new QColor (Qt::green));
    46344637    mVMStateColors.insert (KMachineState_Discarding,    new QColor (Qt::green));
    46354638    mVMStateColors.insert (KMachineState_SettingUp,     new QColor (Qt::green));
  • trunk/src/VBox/Frontends/VirtualBox/src/VBoxMediaManagerDlg.cpp

    r23585 r23703  
    15131513        case KMachineState_Starting:
    15141514        case KMachineState_Restoring:
     1515        case KMachineState_MigratingFrom:
    15151516        {
    15161517            refreshAll();
  • trunk/src/VBox/Frontends/VirtualBox/src/darwin/VBoxDockIconPreview.cpp

    r18689 r23703  
    119119    if (mMainWnd->machineState() == KMachineState_Paused)
    120120        img = mStatePaused;
    121     else if (mMainWnd->machineState() == KMachineState_Restoring)
     121    else if (   mMainWnd->machineState() == KMachineState_Restoring
     122             || mMainWnd->machineState() == KMachineState_MigratingFrom)
    122123        img = mStateRestoring;
    123124    else if (mMainWnd->machineState() == KMachineState_Saving)
  • trunk/src/VBox/Main/ConsoleImpl-LiveMigration.cpp

    r23698 r23703  
    174174        if (RT_FAILURE(rc))
    175175        {
     176            *pszBuf = '\0';
    176177            LogRel(("Migration: RTTcpRead -> %Rrc while reading string ('%s')\n", rc, pszStart));
    177178            return rc;
     
    179180        if (    ch == '\n'
    180181            ||  ch == '\0')
     182        {
     183            *pszBuf = '\0';
    181184            return VINF_SUCCESS;
     185        }
    182186        if (cchBuf <= 1)
    183187        {
     188            *pszBuf = '\0';
    184189            LogRel(("Migration: String buffer overflow: '%s'\n", pszStart));
    185190            return VERR_BUFFER_OVERFLOW;
    186191        }
    187192        *pszBuf++ = ch;
    188         *pszBuf   = '\0';
    189193        cchBuf--;
    190194    }
     
    197201 * @returns S_OK on ACK, E_FAIL+setError() on failure or NACK.
    198202 * @param   pState              The live migration source state.
     203 * @param   pszWhich            Which ACK is this this?
    199204 * @param   pszNAckMsg          Optional NACK message.
    200205 *
     
    202207 */
    203208HRESULT
    204 Console::migrationSrcReadACK(MigrationStateSrc *pState, const char *pszNAckMsg /*= NULL*/)
     209Console::migrationSrcReadACK(MigrationStateSrc *pState, const char *pszWhich,
     210                             const char *pszNAckMsg /*= NULL*/)
    205211{
    206212    char szMsg[128];
    207213    int vrc = migrationTcpReadLine(pState, szMsg, sizeof(szMsg));
    208214    if (RT_FAILURE(vrc))
    209         return setError(E_FAIL, tr("Failed reading ACK: %Rrc"), vrc);
     215        return setError(E_FAIL, tr("Failed reading ACK(%s): %Rrc"), pszWhich, vrc);
    210216    if (strcmp(szMsg, "ACK"))
    211217    {
     
    218224                if (pszNAckMsg)
    219225                {
    220                     LogRel(("Migration: NACK=%Rrc (%d)\n", vrc2, vrc2));
     226                    LogRel(("Migration: %s: NACK=%Rrc (%d)\n", pszWhich, vrc2, vrc2));
    221227                    return setError(E_FAIL, pszNAckMsg);
    222228                }
    223                 return setError(E_FAIL, "NACK - %Rrc (%d)", vrc2, vrc2);
     229                return setError(E_FAIL, "NACK(%s) - %Rrc (%d)", pszWhich, vrc2, vrc2);
    224230            }
    225231        }
    226         return setError(E_FAIL, tr("Expected ACK or NACK, got '%s'"), szMsg);
     232        return setError(E_FAIL, tr("%s: Expected ACK or NACK, got '%s'"), pszWhich, szMsg);
    227233    }
    228234    return S_OK;
     
    247253    if (RT_SUCCESS(vrc))
    248254        vrc = RTTcpWrite(pState->mhSocket, "\n", sizeof("\n") - 1);
     255    if (RT_SUCCESS(vrc))
     256        vrc = RTTcpFlush(pState->mhSocket);
    249257    if (RT_FAILURE(vrc))
    250258        return setError(E_FAIL, tr("Failed writing command '%s': %Rrc"), pszCommand, vrc);
    251     return migrationSrcReadACK(pState);
     259    return migrationSrcReadACK(pState, pszCommand);
    252260}
    253261
     
    456464        MIGRATIONTCPHDR EofHdr = { MIGRATIONTCPHDR_MAGIC, 0 };
    457465        int rc = RTTcpWrite(pState->mhSocket, &EofHdr, sizeof(EofHdr));
     466        if (RT_SUCCESS(rc))
     467            rc = RTTcpFlush(pState->mhSocket);
    458468        if (RT_FAILURE(rc))
    459469        {
     
    546556
    547557    /* ACK */
    548     hrc = migrationSrcReadACK(pState, tr("Invalid password"));
     558    hrc = migrationSrcReadACK(pState, "password", tr("Invalid password"));
    549559    if (FAILED(hrc))
    550560        return hrc;
     
    567577        return setError(E_FAIL, tr("VMR3Migrate -> %Rrc"), vrc);
    568578
    569     hrc = migrationSrcReadACK(pState);
     579    hrc = migrationSrcReadACK(pState, "load-complete");
    570580    if (FAILED(hrc))
    571581        return hrc;
     
    574584     * State fun? Automatic power off?
    575585     */
     586    hrc = migrationSrcSubmitCommand(pState, "done");
     587    if (FAILED(hrc))
     588        return hrc;
    576589
    577590    return S_OK;
     
    591604    MigrationStateSrc *pState = (MigrationStateSrc *)pvUser;
    592605
    593     HRESULT hrc = pState->mptrConsole->migrationSrc(pState);
     606    AutoVMCaller autoVMCaller(pState->mptrConsole);
     607    HRESULT hrc = autoVMCaller.rc();
     608
     609    if (SUCCEEDED(hrc))
     610        hrc = pState->mptrConsole->migrationSrc(pState);
     611
    594612    pState->mptrProgress->notifyComplete(hrc);
    595613
     
    629647                case VMSTATE_SUSPENDING_EXT_LS:
    630648                    pState->mptrConsole->setMachineState(MachineState_Paused);
    631                     pState->mptrConsole->Resume(); /** @todo somehow make the VMM report back external pause even on error. */
    632                     autoLock.unlock();
     649                    /** @todo somehow make the VMM report back external pause even on error. */
     650                    autoLock.leave();
     651                    VMR3Resume(pState->mpVM);
    633652                    break;
    634653            }
     
    946965        else
    947966        {
    948             LogRel(("Migration: Unknown command '%s'\n", szCmd));
     967            LogRel(("Migration: Unknown command '%s' (%.*Rxs)\n", szCmd, strlen(szCmd), szCmd));
     968            vrc = VERR_NOT_IMPLEMENTED;
     969            migrationTcpWriteNACK(pState, vrc);
    949970            break;
    950971        }
  • trunk/src/VBox/Main/ConsoleImpl.cpp

    r23669 r23703  
    47304730     * any error reporting and appropriate state change! */
    47314731
    4732     if (   mMachineState == MachineState_Saved
    4733         || fLiveMigrationTarget)
     4732    if (mMachineState == MachineState_Saved)
    47344733        setMachineState(MachineState_Restoring);
     4734    else if (fLiveMigrationTarget)
     4735        setMachineState(MachineState_MigratingFrom);
    47354736    else
    47364737        setMachineState(MachineState_Starting);
     
    47984799              mMachineState == MachineState_Starting ||
    47994800              mMachineState == MachineState_Restoring ||
     4801              mMachineState == MachineState_MigratingFrom || /** @todo LiveMigration ???*/
    48004802              mMachineState == MachineState_Stopping,
    48014803              ("Invalid machine state: %s\n", Global::stringifyMachineState(mMachineState)));
     
    48094811     * powerUpThread() is calling us on failure, so the VM is already off at
    48104812     * that point. */
    4811     if (!mVMPoweredOff &&
    4812         (mMachineState == MachineState_Starting ||
    4813          mMachineState == MachineState_Restoring))
     4813    if (   !mVMPoweredOff
     4814        && (   mMachineState == MachineState_Starting
     4815            || mMachineState == MachineState_Restoring
     4816            || mMachineState == MachineState_MigratingFrom)
     4817       )
    48144818        mVMPoweredOff = true;
    48154819
     
    48194823     * inappropriate operations while leaving the lock below, Saving or
    48204824     * Restoring should be fine too */
    4821     if (mMachineState != MachineState_Saving &&
    4822         mMachineState != MachineState_Restoring &&
    4823         mMachineState != MachineState_Stopping)
     4825    if (   mMachineState != MachineState_Saving
     4826        && mMachineState != MachineState_Restoring
     4827        && mMachineState != MachineState_MigratingFrom
     4828        && mMachineState != MachineState_Stopping
     4829       )
    48244830        setMachineState(MachineState_Stopping);
    48254831
     
    55045510            if (   that->mMachineState != MachineState_Stopping
    55055511                && that->mMachineState != MachineState_Saving
    5506                 && that->mMachineState != MachineState_Restoring)
     5512                && that->mMachineState != MachineState_Restoring
     5513                && that->mMachineState != MachineState_MigratingFrom
     5514               )
    55075515            {
    55085516                LogFlowFunc(("VM has powered itself off but Console still thinks it is running. Notifying.\n"));
     
    55985606                    that->setMachineState(MachineState_Saved);
    55995607                    break;
     5608                case MachineState_MigratingFrom:
     5609                    /* Migration failed or was cancelled.  Back to powered off. */
     5610                    that->setMachineState(MachineState_PoweredOff);
     5611                    break;
    56005612            }
    56015613            break;
     
    56355647                           && aOldState == VMSTATE_POWERING_ON)
    56365648                       || (   (   that->mMachineState == MachineState_Restoring
     5649                               || that->mMachineState == MachineState_MigratingFrom
    56375650                               || that->mMachineState == MachineState_Paused)
    56385651                           && aOldState == VMSTATE_RESUMING));
     
    68286841    catch (HRESULT aRC) { rc = aRC; }
    68296842
    6830     if (console->mMachineState == MachineState_Starting ||
    6831         console->mMachineState == MachineState_Restoring)
     6843    if (   console->mMachineState == MachineState_Starting
     6844        || console->mMachineState == MachineState_Restoring
     6845        || console->mMachineState == MachineState_MigratingFrom
     6846       )
    68326847    {
    68336848        /* We are still in the Starting/Restoring state. This means one of:
  • trunk/src/VBox/Main/Global.cpp

    r23675 r23703  
    197197        case MachineState_Saving:       return "Saving";
    198198        case MachineState_Restoring:    return "Restoring";
     199        case MachineState_MigratingFrom:return "MigratingFrom";
    199200        case MachineState_Discarding:   return "Discarding";
    200201        case MachineState_SettingUp:    return "SettingUp";
  • trunk/src/VBox/Main/MachineImpl.cpp

    r23697 r23703  
    60026002
    60036003        if (    mData->mMachineState == MachineState_Saved
    6004 #ifdef VBOX_WITH_LIVE_MIGRATION /** @todo fix this properly... a new state for indicating migration? */
    6005              || (   mData->mMachineState == MachineState_Restoring
    6006                  && !mSSData->mStateFilePath.isEmpty() )
    6007 #else
    60086004             || mData->mMachineState == MachineState_Restoring
    6009 #endif
    60106005           )
    60116006        {
     
    92749269        case MachineState_Starting:
    92759270        case MachineState_Restoring:
     9271        case MachineState_MigratingFrom:
    92769272        case MachineState_Paused:
    92779273        case MachineState_Running:
     
    1014710143    AutoWriteLock alock(this);
    1014810144
    10149     AssertReturn(mData->mMachineState == MachineState_Starting ||
    10150                   mData->mMachineState == MachineState_Restoring, E_FAIL);
     10145    AssertReturn(   mData->mMachineState == MachineState_Starting
     10146                 || mData->mMachineState == MachineState_Restoring
     10147                 || mData->mMachineState == MachineState_MigratingFrom, E_FAIL);
    1015110148
    1015210149    typedef std::list <ComPtr<IMedium> > MediaList;
     
    1033310330    /* detect some state transitions */
    1033410331
    10335     if ((oldMachineState == MachineState_Saved &&
    10336            aMachineState == MachineState_Restoring) ||
    10337         (oldMachineState < MachineState_Running /* any other OFF state */ &&
    10338            aMachineState == MachineState_Starting))
     10332    if (   (   oldMachineState == MachineState_Saved
     10333            && aMachineState   == MachineState_Restoring)
     10334        || (   oldMachineState == MachineState_PoweredOff
     10335            && aMachineState   == MachineState_MigratingFrom)
     10336        || (   oldMachineState <  MachineState_Running /* any other OFF state */
     10337            && aMachineState   == MachineState_Starting)
     10338       )
    1033910339    {
    1034010340        /* The EMT thread is about to start */
     
    1034510345        /// change anything when in the Starting/Restoring state
    1034610346    }
    10347     else
    10348     if (oldMachineState >= MachineState_Running &&
    10349         oldMachineState != MachineState_Discarding &&
    10350         oldMachineState != MachineState_SettingUp &&
    10351         aMachineState < MachineState_Running &&
    10352         /* ignore PoweredOff->Saving->PoweredOff transition when taking a
    10353          * snapshot */
    10354         (mSnapshotData.mSnapshot.isNull() ||
    10355          mSnapshotData.mLastState >= MachineState_Running))
     10347    else if (   oldMachineState >= MachineState_Running
     10348             && oldMachineState != MachineState_Discarding
     10349             && oldMachineState != MachineState_SettingUp
     10350             && aMachineState < MachineState_Running
     10351             /* ignore PoweredOff->Saving->PoweredOff transition when taking a
     10352              * snapshot */
     10353             && (   mSnapshotData.mSnapshot.isNull()
     10354                 || mSnapshotData.mLastState >= MachineState_Running)
     10355            )
    1035610356    {
    1035710357        /* The EMT thread has just stopped, unlock attached media. Note that as
     
    1037710377        }
    1037810378    }
    10379     else
    10380     if (oldMachineState == MachineState_Saved &&
    10381         (aMachineState == MachineState_PoweredOff ||
    10382          aMachineState == MachineState_Aborted))
     10379    else if (   oldMachineState == MachineState_Saved
     10380             && (   aMachineState == MachineState_PoweredOff
     10381                 || aMachineState == MachineState_Aborted)
     10382            )
    1038310383    {
    1038410384        /*
     
    1040310403    }
    1040410404
    10405     if (aMachineState == MachineState_Starting ||
    10406         aMachineState == MachineState_Restoring)
     10405    if (   aMachineState == MachineState_Starting
     10406        || aMachineState == MachineState_Restoring
     10407        || aMachineState == MachineState_MigratingFrom
     10408       )
    1040710409    {
    1040810410        /* set the current state modified flag to indicate that the current
     
    1041610418    }
    1041710419
    10418 #ifdef VBOX_WITH_LIVE_MIGRATION /** @todo fix this properly... a new state for indicating migration? */
    10419     if (   deleteSavedState
    10420         && !mSSData->mStateFilePath.isNull())
    10421 #else
    1042210420    if (deleteSavedState)
    10423 #endif
    1042410421    {
    1042510422        if (mRemoveSavedState)
  • trunk/src/VBox/Main/cbinding/tstXPCOMCCall.c

    r23330 r23703  
    8484        case MachineState_Saving:              return "Saving";
    8585        case MachineState_Restoring:           return "Restoring";
     86        case MachineState_MigratingFrom:       return "MigratingFrom";
    8687        case MachineState_Discarding:          return "Discarding";
    8788        case MachineState_SettingUp:           return "SettingUp";
  • trunk/src/VBox/Main/idl/VirtualBox.xidl

    r23702 r23703  
    473473  <enum
    474474    name="MachineState"
    475     uuid="73bf04d0-7c4f-4684-9abf-d65a9ad74343"
     475    uuid="f532545d-9ae7-4402-8b5f-1ea7d778cfc7"
    476476  >
    477477    <desc>
     
    673673      </desc>
    674674    </const>
    675     <const name="Discarding"            value="11">
     675    <const name="MigratingFrom"         value="11">
     676      <desc>
     677        Migrating the machine state from another host or process.
     678      </desc>
     679    </const>
     680    <const name="Discarding"            value="12">
    676681      <desc>
    677682        Snapshot of the machine is being discarded.
    678683      </desc>
    679684    </const>
    680     <const name="SettingUp"             value="12">
     685    <const name="SettingUp"             value="13">
    681686      <desc>
    682687        Lengthy setup operation is in progress.
     
    689694      </desc>
    690695    </const>
    691     <const name="LastOnline"  value="10" wsmap="suppress"> <!-- Restoring -->
     696    <const name="LastOnline"  value="11" wsmap="suppress"> <!-- Restoring -->
    692697      <desc>
    693698        Pseudo-state: last online state (for use in relational expressions).
     
    700705      </desc>
    701706    </const>
    702     <const name="LastTransient"  value="12" wsmap="suppress"> <!-- SettingUp -->
     707    <const name="LastTransient"  value="13" wsmap="suppress"> <!-- SettingUp -->
    703708      <desc>
    704709        Pseudo-state: last transient state (for use in relational expressions).
  • trunk/src/VBox/Main/include/ConsoleImpl.h

    r23669 r23703  
    518518    static DECLCALLBACK(int)    migrationSrcThreadWrapper(RTTHREAD hThread, void *pvUser);
    519519    HRESULT                     migrationSrc(MigrationStateSrc *pState);
    520     HRESULT                     migrationSrcReadACK(MigrationStateSrc *pState, const char *pszNAckMsg = NULL);
     520    HRESULT                     migrationSrcReadACK(MigrationStateSrc *pState, const char *pszWhich, const char *pszNAckMsg = NULL);
    521521    HRESULT                     migrationSrcSubmitCommand(MigrationStateSrc *pState, const char *pszCommand);
    522522    int                         migrationDst(PVM pVM, IMachine *pMachine, bool fStartPaused, void *pvVMCallbackTask);
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette