Package new upstream version open-vm-tools-10.3.10-12406962.
Removed quiescing-combined.patch which is no longer needed.
This commit is contained in:
		
							parent
							
								
									7f423ae58d
								
							
						
					
					
						commit
						723937e2f7
					
				
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -13,3 +13,4 @@ | |||||||
| /open-vm-tools-10.2.5-8068406.tar.gz | /open-vm-tools-10.2.5-8068406.tar.gz | ||||||
| /open-vm-tools-10.3.0-8931395.tar.gz | /open-vm-tools-10.3.0-8931395.tar.gz | ||||||
| /open-vm-tools-10.3.5-10430147.tar.gz | /open-vm-tools-10.3.5-10430147.tar.gz | ||||||
|  | /open-vm-tools-10.3.10-12406962.tar.gz | ||||||
|  | |||||||
| @ -20,15 +20,15 @@ | |||||||
| 
 | 
 | ||||||
| %global _hardened_build 1 | %global _hardened_build 1 | ||||||
| %global majorversion    10.3 | %global majorversion    10.3 | ||||||
| %global minorversion    5 | %global minorversion    10 | ||||||
| %global toolsbuild      10430147 | %global toolsbuild      12406962 | ||||||
| %global toolsversion    %{majorversion}.%{minorversion} | %global toolsversion    %{majorversion}.%{minorversion} | ||||||
| %global toolsdaemon     vmtoolsd | %global toolsdaemon     vmtoolsd | ||||||
| %global vgauthdaemon    vgauthd | %global vgauthdaemon    vgauthd | ||||||
| 
 | 
 | ||||||
| Name:             open-vm-tools | Name:             open-vm-tools | ||||||
| Version:          %{toolsversion} | Version:          %{toolsversion} | ||||||
| Release:          2%{?dist} | Release:          1%{?dist} | ||||||
| Summary:          Open Virtual Machine Tools for virtual machines hosted on VMware | Summary:          Open Virtual Machine Tools for virtual machines hosted on VMware | ||||||
| License:          GPLv2 | License:          GPLv2 | ||||||
| URL:              https://github.com/vmware/%{name} | URL:              https://github.com/vmware/%{name} | ||||||
| @ -45,7 +45,6 @@ ExclusiveArch:    %{ix86} x86_64 | |||||||
| %endif | %endif | ||||||
| 
 | 
 | ||||||
| Patch1:           gcc9-warnings.patch | Patch1:           gcc9-warnings.patch | ||||||
| Patch2:           quiescing-combined.patch |  | ||||||
| 
 | 
 | ||||||
| BuildRequires:    autoconf | BuildRequires:    autoconf | ||||||
| BuildRequires:    automake | BuildRequires:    automake | ||||||
| @ -322,6 +321,10 @@ fi | |||||||
| %{_bindir}/vmware-vgauth-smoketest | %{_bindir}/vmware-vgauth-smoketest | ||||||
| 
 | 
 | ||||||
| %changelog | %changelog | ||||||
|  | * Sat Mar 16 2019 Ravindra Kumar <ravindrakumar@vmware.com> - 10.3.10-1 | ||||||
|  | - Package new upstream version open-vm-tools-10.3.10-12406962. | ||||||
|  | - Removed quiescing-combined.patch which is no longer needed. | ||||||
|  | 
 | ||||||
| * Wed Feb 13 2019 Ravindra Kumar <ravindrakumar@vmware.com> - 10.3.5-2 | * Wed Feb 13 2019 Ravindra Kumar <ravindrakumar@vmware.com> - 10.3.5-2 | ||||||
| - Combine all gcc9 warning patches into one single gcc9-warnings.patch. | - Combine all gcc9 warning patches into one single gcc9-warnings.patch. | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,687 +0,0 @@ | |||||||
| diff --git a/services/plugins/vmbackup/stateMachine.c b/services/plugins/vmbackup/stateMachine.c
 |  | ||||||
| index ebeaf42b6..14d08a77f 100644
 |  | ||||||
| --- a/services/plugins/vmbackup/stateMachine.c
 |  | ||||||
| +++ b/services/plugins/vmbackup/stateMachine.c
 |  | ||||||
| @@ -453,12 +453,13 @@ VmBackupDoAbort(void)
 |  | ||||||
|        g_static_mutex_unlock(&gBackupState->opLock); |  | ||||||
|   |  | ||||||
|  #ifdef __linux__ |  | ||||||
| -      /* Thaw the guest if already quiesced */
 |  | ||||||
| +      /* If quiescing has been completed, then undo it.  */
 |  | ||||||
|        if (gBackupState->machineState == VMBACKUP_MSTATE_SYNC_FREEZE) { |  | ||||||
| -         g_debug("Guest already quiesced, thawing for abort\n");
 |  | ||||||
| -         if (!gBackupState->provider->snapshotDone(gBackupState,
 |  | ||||||
| +         g_debug("Aborting with file system already quiesced, undo quiescing "
 |  | ||||||
| +                 "operation.\n");
 |  | ||||||
| +         if (!gBackupState->provider->undo(gBackupState,
 |  | ||||||
|                                        gBackupState->provider->clientData)) { |  | ||||||
| -            g_debug("Thaw during abort failed\n");
 |  | ||||||
| +            g_debug("Quiescing undo failed.\n");
 |  | ||||||
|              eventMsg = "Quiesce could not be aborted."; |  | ||||||
|           } |  | ||||||
|        } |  | ||||||
| diff --git a/services/plugins/vmbackup/syncDriverOps.c b/services/plugins/vmbackup/syncDriverOps.c
 |  | ||||||
| index 9f5844439..1dd98e323 100644
 |  | ||||||
| --- a/services/plugins/vmbackup/syncDriverOps.c
 |  | ||||||
| +++ b/services/plugins/vmbackup/syncDriverOps.c
 |  | ||||||
| @@ -35,16 +35,53 @@
 |  | ||||||
|  #include <process.h> |  | ||||||
|  #endif |  | ||||||
|   |  | ||||||
| +/*
 |  | ||||||
| + * Define an enumeration type VmBackupOpType and a corresponding array
 |  | ||||||
| + * VmBackupOpName whose entries provide the printable names of the
 |  | ||||||
| + * enumeration ids in VmBackupOpType.
 |  | ||||||
| + *
 |  | ||||||
| + * VmBackupOpType and VmBackupOpName are each defined as an invocation
 |  | ||||||
| + * of a macro VMBACKUP_OPLIST.  VMBACKUP_OPLIST specifies a list of
 |  | ||||||
| + * enumeration ids using a macro VMBACKUP_OP that must be defined before
 |  | ||||||
| + * invoking VMBACKUP_OPLIST.  VMBACKUP_OP takes a single argument, which
 |  | ||||||
| + * should be an enumeration id, and is defined to generate from the id
 |  | ||||||
| + * either the id itself or a string to be used as its printable name.  The
 |  | ||||||
| + * result is that an invocation of VMBACKUP_OPLIST generates either the
 |  | ||||||
| + * list of enumeration ids or the list of their printable names.
 |  | ||||||
| + */
 |  | ||||||
| +#define VMBACKUP_OPLIST         \
 |  | ||||||
| +    VMBACKUP_OP(OP_FREEZE),     \
 |  | ||||||
| +    VMBACKUP_OP(OP_THAW),       \
 |  | ||||||
| +    VMBACKUP_OP(OP_UNDO),
 |  | ||||||
| +
 |  | ||||||
| +#define VMBACKUP_OPID(id)       id
 |  | ||||||
| +#define VMBACKUP_OPNAME(id)     #id
 |  | ||||||
| +
 |  | ||||||
| +#undef VMBACKUP_OP
 |  | ||||||
| +#define VMBACKUP_OP(id)       VMBACKUP_OPID(id)
 |  | ||||||
| +
 |  | ||||||
| +typedef enum {
 |  | ||||||
| +   VMBACKUP_OPLIST
 |  | ||||||
| +} VmBackupOpType;
 |  | ||||||
| +
 |  | ||||||
| +#undef VMBACKUP_OP
 |  | ||||||
| +#define VMBACKUP_OP(id)       VMBACKUP_OPNAME(id)
 |  | ||||||
| +
 |  | ||||||
| +static const char *VmBackupOpName[] = {
 |  | ||||||
| +   VMBACKUP_OPLIST
 |  | ||||||
| +};
 |  | ||||||
| +
 |  | ||||||
| +#undef VMBACKUP_OP
 |  | ||||||
| +
 |  | ||||||
|  typedef struct VmBackupDriverOp { |  | ||||||
|     VmBackupOp callbacks; |  | ||||||
|     const char *volumes; |  | ||||||
| -   Bool freeze;
 |  | ||||||
| +   VmBackupOpType opType;
 |  | ||||||
|     Bool canceled; |  | ||||||
|     SyncDriverHandle *syncHandle; |  | ||||||
|     SyncManifest *manifest; |  | ||||||
|  } VmBackupDriverOp; |  | ||||||
|   |  | ||||||
| -
 |  | ||||||
|  /* |  | ||||||
|   *----------------------------------------------------------------------------- |  | ||||||
|   * |  | ||||||
| @@ -97,7 +134,7 @@ VmBackupDriverOpQuery(VmBackupOp *_op) // IN
 |  | ||||||
|     VmBackupDriverOp *op = (VmBackupDriverOp *) _op; |  | ||||||
|     VmBackupOpStatus ret; |  | ||||||
|   |  | ||||||
| -   if (op->freeze) {
 |  | ||||||
| +   if (op->opType == OP_FREEZE) {
 |  | ||||||
|        SyncDriverStatus st = SyncDriver_QueryStatus(*op->syncHandle, 0); |  | ||||||
|   |  | ||||||
|        g_debug("SyncDriver status: %d\n", st); |  | ||||||
| @@ -208,7 +245,7 @@ VmBackupDriverOpCancel(VmBackupOp *_op)   // IN
 |  | ||||||
|   |  | ||||||
|  static VmBackupDriverOp * |  | ||||||
|  VmBackupNewDriverOp(VmBackupState *state,       // IN |  | ||||||
| -                    Bool freeze,                // IN
 |  | ||||||
| +                    VmBackupOpType opType,      // IN
 |  | ||||||
|                      SyncDriverHandle *handle,   // IN |  | ||||||
|                      const char *volumes,        // IN |  | ||||||
|                      Bool useNullDriverPrefs)    // IN |  | ||||||
| @@ -216,8 +253,9 @@ VmBackupNewDriverOp(VmBackupState *state,       // IN
 |  | ||||||
|     Bool success; |  | ||||||
|     VmBackupDriverOp *op = NULL; |  | ||||||
|   |  | ||||||
| -   g_return_val_if_fail((handle == NULL || *handle == SYNCDRIVER_INVALID_HANDLE) ||
 |  | ||||||
| -                        !freeze,
 |  | ||||||
| +   g_return_val_if_fail((handle == NULL ||
 |  | ||||||
| +                         *handle == SYNCDRIVER_INVALID_HANDLE) ||
 |  | ||||||
| +                        opType != OP_FREEZE,
 |  | ||||||
|                          NULL); |  | ||||||
|   |  | ||||||
|     op = Util_SafeMalloc(sizeof *op); |  | ||||||
| @@ -226,24 +264,32 @@ VmBackupNewDriverOp(VmBackupState *state,       // IN
 |  | ||||||
|     op->callbacks.queryFn = VmBackupDriverOpQuery; |  | ||||||
|     op->callbacks.cancelFn = VmBackupDriverOpCancel; |  | ||||||
|     op->callbacks.releaseFn = VmBackupDriverOpRelease; |  | ||||||
| -   op->freeze = freeze;
 |  | ||||||
| +   op->opType = opType;
 |  | ||||||
|     op->volumes = volumes; |  | ||||||
|   |  | ||||||
|     op->syncHandle = g_new0(SyncDriverHandle, 1); |  | ||||||
|     *op->syncHandle = (handle != NULL) ? *handle : SYNCDRIVER_INVALID_HANDLE; |  | ||||||
|   |  | ||||||
| -   if (freeze) {
 |  | ||||||
| -      success = SyncDriver_Freeze(op->volumes,
 |  | ||||||
| -                                  useNullDriverPrefs ?
 |  | ||||||
| -                                  state->enableNullDriver : FALSE,
 |  | ||||||
| -                                  op->syncHandle,
 |  | ||||||
| -                                  state->excludedFileSystems);
 |  | ||||||
| -   } else {
 |  | ||||||
| -      op->manifest = SyncNewManifest(state, *op->syncHandle);
 |  | ||||||
| -      success = VmBackupDriverThaw(op->syncHandle);
 |  | ||||||
| +   switch (opType) {
 |  | ||||||
| +      case OP_FREEZE:
 |  | ||||||
| +         success = SyncDriver_Freeze(op->volumes,
 |  | ||||||
| +                                     useNullDriverPrefs ?
 |  | ||||||
| +                                        state->enableNullDriver : FALSE,
 |  | ||||||
| +                                     op->syncHandle,
 |  | ||||||
| +                                     state->excludedFileSystems);
 |  | ||||||
| +         break;
 |  | ||||||
| +      case OP_THAW:
 |  | ||||||
| +         op->manifest = SyncNewManifest(state, *op->syncHandle);
 |  | ||||||
| +         success = VmBackupDriverThaw(op->syncHandle);
 |  | ||||||
| +         break;
 |  | ||||||
| +      default:
 |  | ||||||
| +         ASSERT(opType == OP_UNDO);
 |  | ||||||
| +         success = VmBackupDriverThaw(op->syncHandle);
 |  | ||||||
| +         break;
 |  | ||||||
|     } |  | ||||||
|     if (!success) { |  | ||||||
| -      g_warning("Error %s filesystems.", freeze ? "freezing" : "thawing");
 |  | ||||||
| +      g_warning("Error trying to perform %s on filesystems.",
 |  | ||||||
| +                VmBackupOpName[opType]);
 |  | ||||||
|        g_free(op->syncHandle); |  | ||||||
|        SyncManifestRelease(op->manifest); |  | ||||||
|        free(op); |  | ||||||
| @@ -329,7 +375,7 @@ VmBackupSyncDriverStart(VmBackupState *state,
 |  | ||||||
|     VmBackupDriverOp *op; |  | ||||||
|   |  | ||||||
|     g_debug("*** %s\n", __FUNCTION__); |  | ||||||
| -   op = VmBackupNewDriverOp(state, TRUE, NULL, state->volumes, TRUE);
 |  | ||||||
| +   op = VmBackupNewDriverOp(state, OP_FREEZE, NULL, state->volumes, TRUE);
 |  | ||||||
|   |  | ||||||
|     if (op != NULL) { |  | ||||||
|        state->clientData = op->syncHandle; |  | ||||||
| @@ -366,7 +412,7 @@ VmBackupSyncDriverOnlyStart(VmBackupState *state,
 |  | ||||||
|     VmBackupDriverOp *op; |  | ||||||
|   |  | ||||||
|     g_debug("*** %s\n", __FUNCTION__); |  | ||||||
| -   op = VmBackupNewDriverOp(state, TRUE, NULL, state->volumes, FALSE);
 |  | ||||||
| +   op = VmBackupNewDriverOp(state, OP_FREEZE, NULL, state->volumes, FALSE);
 |  | ||||||
|   |  | ||||||
|     if (op != NULL) { |  | ||||||
|        state->clientData = op->syncHandle; |  | ||||||
| @@ -404,7 +450,7 @@ VmBackupSyncDriverStart(ToolsAppCtx *ctx,
 |  | ||||||
|     VmBackupState *state = (VmBackupState*) clientData; |  | ||||||
|   |  | ||||||
|     g_debug("*** %s\n", __FUNCTION__); |  | ||||||
| -   op = VmBackupNewDriverOp(state, TRUE, NULL, state->volumes, TRUE);
 |  | ||||||
| +   op = VmBackupNewDriverOp(state, OP_FREEZE, NULL, state->volumes, TRUE);
 |  | ||||||
|   |  | ||||||
|     if (op != NULL) { |  | ||||||
|        state->clientData = op->syncHandle; |  | ||||||
| @@ -442,7 +488,7 @@ VmBackupSyncDriverOnlyStart(ToolsAppCtx *ctx,
 |  | ||||||
|     VmBackupState *state = (VmBackupState*) clientData; |  | ||||||
|   |  | ||||||
|     g_debug("*** %s\n", __FUNCTION__); |  | ||||||
| -   op = VmBackupNewDriverOp(state, TRUE, NULL, state->volumes, FALSE);
 |  | ||||||
| +   op = VmBackupNewDriverOp(state, OP_FREEZE, NULL, state->volumes, FALSE);
 |  | ||||||
|   |  | ||||||
|     if (op != NULL) { |  | ||||||
|        state->clientData = op->syncHandle; |  | ||||||
| @@ -480,7 +526,7 @@ VmBackupSyncDriverSnapshotDone(VmBackupState *state,
 |  | ||||||
|   |  | ||||||
|     g_debug("*** %s\n", __FUNCTION__); |  | ||||||
|   |  | ||||||
| -   op = VmBackupNewDriverOp(state, FALSE, state->clientData, NULL, TRUE);
 |  | ||||||
| +   op = VmBackupNewDriverOp(state, OP_THAW, state->clientData, NULL, TRUE);
 |  | ||||||
|     g_free(state->clientData); |  | ||||||
|     state->clientData = NULL; |  | ||||||
|   |  | ||||||
| @@ -513,12 +559,78 @@ VmBackupSyncDriverOnlySnapshotDone(VmBackupState *state,
 |  | ||||||
|   |  | ||||||
|     g_debug("*** %s\n", __FUNCTION__); |  | ||||||
|   |  | ||||||
| -   op = VmBackupNewDriverOp(state, FALSE, state->clientData, NULL, FALSE);
 |  | ||||||
| +   op = VmBackupNewDriverOp(state, OP_THAW, state->clientData, NULL, FALSE);
 |  | ||||||
| +   g_free(state->clientData);
 |  | ||||||
| +   state->clientData = NULL;
 |  | ||||||
| +
 |  | ||||||
| +   return VmBackup_SetCurrentOp(state, (VmBackupOp *) op, NULL, __FUNCTION__);
 |  | ||||||
| +}
 |  | ||||||
| +
 |  | ||||||
| +
 |  | ||||||
| +#if defined(__linux__)
 |  | ||||||
| +/*
 |  | ||||||
| + *-----------------------------------------------------------------------------
 |  | ||||||
| + *
 |  | ||||||
| + *  VmBackupSyncDriverUndo --
 |  | ||||||
| + *
 |  | ||||||
| + *    Undo a completed quiescing operation.
 |  | ||||||
| + *
 |  | ||||||
| + * Result
 |  | ||||||
| + *    TRUE, unless an error occurs.
 |  | ||||||
| + *
 |  | ||||||
| + * Side effects:
 |  | ||||||
| + *    None.
 |  | ||||||
| + *
 |  | ||||||
| + *-----------------------------------------------------------------------------
 |  | ||||||
| + */
 |  | ||||||
| +
 |  | ||||||
| +static Bool
 |  | ||||||
| +VmBackupSyncDriverUndo(VmBackupState *state,
 |  | ||||||
| +                       void *clientData)
 |  | ||||||
| +{
 |  | ||||||
| +   VmBackupDriverOp *op;
 |  | ||||||
| +
 |  | ||||||
| +   g_debug("*** %s\n", __FUNCTION__);
 |  | ||||||
| +
 |  | ||||||
| +   op = VmBackupNewDriverOp(state, OP_UNDO, state->clientData, NULL, TRUE);
 |  | ||||||
| +   g_free(state->clientData);
 |  | ||||||
| +   state->clientData = NULL;
 |  | ||||||
| +
 |  | ||||||
| +   return VmBackup_SetCurrentOp(state, (VmBackupOp *) op, NULL, __FUNCTION__);
 |  | ||||||
| +}
 |  | ||||||
| +
 |  | ||||||
| +
 |  | ||||||
| +/*
 |  | ||||||
| + *-----------------------------------------------------------------------------
 |  | ||||||
| + *
 |  | ||||||
| + *  VmBackupSyncDriverOnlyUndo --
 |  | ||||||
| + *
 |  | ||||||
| + *    Undo a completed quiescing operation.
 |  | ||||||
| + *
 |  | ||||||
| + * Result
 |  | ||||||
| + *    TRUE, unless an error occurs.
 |  | ||||||
| + *
 |  | ||||||
| + * Side effects:
 |  | ||||||
| + *    None.
 |  | ||||||
| + *
 |  | ||||||
| + *-----------------------------------------------------------------------------
 |  | ||||||
| + */
 |  | ||||||
| +
 |  | ||||||
| +static Bool
 |  | ||||||
| +VmBackupSyncDriverOnlyUndo(VmBackupState *state,
 |  | ||||||
| +                           void *clientData)
 |  | ||||||
| +{
 |  | ||||||
| +   VmBackupDriverOp *op;
 |  | ||||||
| +
 |  | ||||||
| +   g_debug("*** %s\n", __FUNCTION__);
 |  | ||||||
| +
 |  | ||||||
| +   op = VmBackupNewDriverOp(state, OP_UNDO, state->clientData, NULL, FALSE);
 |  | ||||||
|     g_free(state->clientData); |  | ||||||
|     state->clientData = NULL; |  | ||||||
|   |  | ||||||
|     return VmBackup_SetCurrentOp(state, (VmBackupOp *) op, NULL, __FUNCTION__); |  | ||||||
|  } |  | ||||||
| +#endif
 |  | ||||||
|   |  | ||||||
|   |  | ||||||
|  /* |  | ||||||
| @@ -579,10 +691,17 @@ VmBackup_NewSyncDriverProviderInternal(Bool useNullDriverPrefs)
 |  | ||||||
|     if (useNullDriverPrefs) { |  | ||||||
|        provider->start = VmBackupSyncDriverStart; |  | ||||||
|        provider->snapshotDone = VmBackupSyncDriverSnapshotDone; |  | ||||||
| +#if defined(__linux__)
 |  | ||||||
| +      provider->undo = VmBackupSyncDriverUndo;
 |  | ||||||
| +#endif
 |  | ||||||
|     } else { |  | ||||||
|        provider->start = VmBackupSyncDriverOnlyStart; |  | ||||||
|        provider->snapshotDone = VmBackupSyncDriverOnlySnapshotDone; |  | ||||||
| +#if defined(__linux__)
 |  | ||||||
| +      provider->undo = VmBackupSyncDriverOnlyUndo;
 |  | ||||||
| +#endif
 |  | ||||||
|     } |  | ||||||
| +
 |  | ||||||
|     provider->release = VmBackupSyncDriverRelease; |  | ||||||
|     provider->clientData = NULL; |  | ||||||
|   |  | ||||||
| diff --git a/services/plugins/vmbackup/vmBackupInt.h b/services/plugins/vmbackup/vmBackupInt.h
 |  | ||||||
| index 7b819ac15..ad3f2d7c2 100644
 |  | ||||||
| --- a/services/plugins/vmbackup/vmBackupInt.h
 |  | ||||||
| +++ b/services/plugins/vmbackup/vmBackupInt.h
 |  | ||||||
| @@ -156,6 +156,7 @@ typedef struct VmBackupSyncProvider {
 |  | ||||||
|     VmBackupProviderCallback start; |  | ||||||
|  #else |  | ||||||
|     ToolsCorePoolCb start; |  | ||||||
| +   VmBackupProviderCallback undo;
 |  | ||||||
|  #endif |  | ||||||
|     VmBackupProviderCallback snapshotDone; |  | ||||||
|     void (*release)(struct VmBackupSyncProvider *); |  | ||||||
| diff --git a/services/plugins/vmbackup/stateMachine.c b/services/plugins/vmbackup/stateMachine.c
 |  | ||||||
| index 14d08a77f..281181729 100644
 |  | ||||||
| --- a/services/plugins/vmbackup/stateMachine.c
 |  | ||||||
| +++ b/services/plugins/vmbackup/stateMachine.c
 |  | ||||||
| @@ -224,6 +224,7 @@ VmBackup_SendEvent(const char *event,
 |  | ||||||
|     if (gBackupState->keepAlive != NULL) { |  | ||||||
|        g_source_destroy(gBackupState->keepAlive); |  | ||||||
|        g_source_unref(gBackupState->keepAlive); |  | ||||||
| +      gBackupState->keepAlive = NULL;
 |  | ||||||
|     } |  | ||||||
|   |  | ||||||
|     msg = g_strdup_printf(VMBACKUP_PROTOCOL_EVENT_SET" %s %u %s", |  | ||||||
| @@ -267,19 +268,27 @@ VmBackup_SendEvent(const char *event,
 |  | ||||||
|                               &result, &resultLen); |  | ||||||
|  #endif |  | ||||||
|   |  | ||||||
| -   if (!success) {
 |  | ||||||
| +   if (success) {
 |  | ||||||
| +      ASSERT(gBackupState->keepAlive == NULL);
 |  | ||||||
| +      gBackupState->keepAlive =
 |  | ||||||
| +         g_timeout_source_new(VMBACKUP_KEEP_ALIVE_PERIOD / 2);
 |  | ||||||
| +      VMTOOLSAPP_ATTACH_SOURCE(gBackupState->ctx,
 |  | ||||||
| +                               gBackupState->keepAlive,
 |  | ||||||
| +                               VmBackupKeepAliveCallback,
 |  | ||||||
| +                               NULL,
 |  | ||||||
| +                               NULL);
 |  | ||||||
| +   } else {
 |  | ||||||
|        g_warning("Failed to send vmbackup event: %s, result: %s.\n", |  | ||||||
|                  msg, result); |  | ||||||
| +      if (gBackupState->rpcState != VMBACKUP_RPC_STATE_IGNORE) {
 |  | ||||||
| +         g_debug("Changing rpcState from %d to %d\n",
 |  | ||||||
| +                 gBackupState->rpcState, VMBACKUP_RPC_STATE_ERROR);
 |  | ||||||
| +         gBackupState->rpcState = VMBACKUP_RPC_STATE_ERROR;
 |  | ||||||
| +      }
 |  | ||||||
|     } |  | ||||||
|     vm_free(result); |  | ||||||
|     g_free(msg); |  | ||||||
|   |  | ||||||
| -   gBackupState->keepAlive = g_timeout_source_new(VMBACKUP_KEEP_ALIVE_PERIOD / 2);
 |  | ||||||
| -   VMTOOLSAPP_ATTACH_SOURCE(gBackupState->ctx,
 |  | ||||||
| -                            gBackupState->keepAlive,
 |  | ||||||
| -                            VmBackupKeepAliveCallback,
 |  | ||||||
| -                            NULL,
 |  | ||||||
| -                            NULL);
 |  | ||||||
|     return success; |  | ||||||
|  } |  | ||||||
|   |  | ||||||
| @@ -440,6 +449,12 @@ VmBackupDoAbort(void)
 |  | ||||||
|  { |  | ||||||
|     g_debug("*** %s\n", __FUNCTION__); |  | ||||||
|     ASSERT(gBackupState != NULL); |  | ||||||
| +
 |  | ||||||
| +   /*
 |  | ||||||
| +    * Once we abort the operation, we don't care about RPC state.
 |  | ||||||
| +    */
 |  | ||||||
| +   gBackupState->rpcState = VMBACKUP_RPC_STATE_IGNORE;
 |  | ||||||
| +
 |  | ||||||
|     if (gBackupState->machineState != VMBACKUP_MSTATE_SCRIPT_ERROR && |  | ||||||
|         gBackupState->machineState != VMBACKUP_MSTATE_SYNC_ERROR) { |  | ||||||
|        const char *eventMsg = "Quiesce aborted."; |  | ||||||
| @@ -623,6 +638,17 @@ VmBackupAsyncCallback(void *clientData)
 |  | ||||||
|        if (opPending) { |  | ||||||
|           goto exit; |  | ||||||
|        } |  | ||||||
| +
 |  | ||||||
| +      /*
 |  | ||||||
| +       * VMX state might have changed when we were processing
 |  | ||||||
| +       * currentOp. This is usually detected by failures in
 |  | ||||||
| +       * sending backup event to the host.
 |  | ||||||
| +       */
 |  | ||||||
| +      if (gBackupState->rpcState == VMBACKUP_RPC_STATE_ERROR) {
 |  | ||||||
| +         g_warning("Aborting backup operation due to RPC errors.");
 |  | ||||||
| +         VmBackupDoAbort();
 |  | ||||||
| +         goto exit;
 |  | ||||||
| +      }
 |  | ||||||
|     } |  | ||||||
|   |  | ||||||
|     switch (gBackupState->machineState) { |  | ||||||
| @@ -958,6 +984,7 @@ VmBackupStartCommon(RpcInData *data,
 |  | ||||||
|     gBackupState->enableNullDriver = VMBACKUP_CONFIG_GET_BOOL(ctx->config, |  | ||||||
|                                                               "enableNullDriver", |  | ||||||
|                                                               TRUE); |  | ||||||
| +   gBackupState->rpcState = VMBACKUP_RPC_STATE_NORMAL;
 |  | ||||||
|   |  | ||||||
|     g_debug("Using quiesceApps = %d, quiesceFS = %d, allowHWProvider = %d," |  | ||||||
|             " execScripts = %d, scriptArg = %s, timeout = %u," |  | ||||||
| diff --git a/services/plugins/vmbackup/vmBackupInt.h b/services/plugins/vmbackup/vmBackupInt.h
 |  | ||||||
| index ad3f2d7c2..4258ee0ae 100644
 |  | ||||||
| --- a/services/plugins/vmbackup/vmBackupInt.h
 |  | ||||||
| +++ b/services/plugins/vmbackup/vmBackupInt.h
 |  | ||||||
| @@ -72,6 +72,12 @@ typedef enum {
 |  | ||||||
|     VMBACKUP_MSTATE_SYNC_ERROR |  | ||||||
|  } VmBackupMState; |  | ||||||
|   |  | ||||||
| +typedef enum {
 |  | ||||||
| +   VMBACKUP_RPC_STATE_NORMAL,
 |  | ||||||
| +   VMBACKUP_RPC_STATE_ERROR,
 |  | ||||||
| +   VMBACKUP_RPC_STATE_IGNORE
 |  | ||||||
| +} VmBackupRpcState;
 |  | ||||||
| +
 |  | ||||||
|  /** |  | ||||||
|   * This is a "base struct" for asynchronous operations monitored by the |  | ||||||
|   * state machine. Each implementation should provide these three functions |  | ||||||
| @@ -138,6 +144,7 @@ typedef struct VmBackupState {
 |  | ||||||
|     Bool           vssBootableSystemState; |  | ||||||
|     Bool           vssPartialFileSupport; |  | ||||||
|     Bool           vssUseDefault; |  | ||||||
| +   VmBackupRpcState rpcState;
 |  | ||||||
|  } VmBackupState; |  | ||||||
|   |  | ||||||
|  typedef Bool (*VmBackupCallback)(VmBackupState *); |  | ||||||
| diff --git a/services/plugins/vmbackup/stateMachine.c b/services/plugins/vmbackup/stateMachine.c
 |  | ||||||
| index 281181729..d38187d1f 100644
 |  | ||||||
| --- a/services/plugins/vmbackup/stateMachine.c
 |  | ||||||
| +++ b/services/plugins/vmbackup/stateMachine.c
 |  | ||||||
| @@ -201,17 +201,19 @@ VmBackupPrivSendMsg(gchar *msg,
 |  | ||||||
|   * Sends a command to the VMX asking it to update VMDB about a new backup event. |  | ||||||
|   * This will restart the keep-alive timer. |  | ||||||
|   * |  | ||||||
| + * As the name implies, does not abort the quiesce operation on failure.
 |  | ||||||
| + *
 |  | ||||||
|   * @param[in]  event    The event to set. |  | ||||||
|   * @param[in]  code     Error code. |  | ||||||
| - * @param[in]  dest     Error description.
 |  | ||||||
| + * @param[in]  desc     Error description.
 |  | ||||||
|   * |  | ||||||
|   * @return TRUE on success. |  | ||||||
|   */ |  | ||||||
|   |  | ||||||
|  Bool |  | ||||||
| -VmBackup_SendEvent(const char *event,
 |  | ||||||
| -                   const uint32 code,
 |  | ||||||
| -                   const char *desc)
 |  | ||||||
| +VmBackup_SendEventNoAbort(const char *event,
 |  | ||||||
| +                          const uint32 code,
 |  | ||||||
| +                          const char *desc)
 |  | ||||||
|  { |  | ||||||
|     Bool success; |  | ||||||
|     char *result = NULL; |  | ||||||
| @@ -280,11 +282,6 @@ VmBackup_SendEvent(const char *event,
 |  | ||||||
|     } else { |  | ||||||
|        g_warning("Failed to send vmbackup event: %s, result: %s.\n", |  | ||||||
|                  msg, result); |  | ||||||
| -      if (gBackupState->rpcState != VMBACKUP_RPC_STATE_IGNORE) {
 |  | ||||||
| -         g_debug("Changing rpcState from %d to %d\n",
 |  | ||||||
| -                 gBackupState->rpcState, VMBACKUP_RPC_STATE_ERROR);
 |  | ||||||
| -         gBackupState->rpcState = VMBACKUP_RPC_STATE_ERROR;
 |  | ||||||
| -      }
 |  | ||||||
|     } |  | ||||||
|     vm_free(result); |  | ||||||
|     g_free(msg); |  | ||||||
| @@ -293,6 +290,36 @@ VmBackup_SendEvent(const char *event,
 |  | ||||||
|  } |  | ||||||
|   |  | ||||||
|   |  | ||||||
| +/**
 |  | ||||||
| + * Sends a command to the VMX asking it to update VMDB about a new backup event.
 |  | ||||||
| + * This will restart the keep-alive timer.
 |  | ||||||
| + *
 |  | ||||||
| + * Aborts the quiesce operation on RPC failure.
 |  | ||||||
| + *
 |  | ||||||
| + * @param[in]  event    The event to set.
 |  | ||||||
| + * @param[in]  code     Error code.
 |  | ||||||
| + * @param[in]  desc     Error description.
 |  | ||||||
| + *
 |  | ||||||
| + * @return TRUE on success.
 |  | ||||||
| + */
 |  | ||||||
| +
 |  | ||||||
| +Bool
 |  | ||||||
| +VmBackup_SendEvent(const char *event,
 |  | ||||||
| +                   const uint32 code,
 |  | ||||||
| +                   const char *desc)
 |  | ||||||
| +{
 |  | ||||||
| +   Bool success = VmBackup_SendEventNoAbort(event, code, desc);
 |  | ||||||
| +
 |  | ||||||
| +   if (!success  && gBackupState->rpcState != VMBACKUP_RPC_STATE_IGNORE) {
 |  | ||||||
| +      g_debug("Changing rpcState from %d to %d\n",
 |  | ||||||
| +              gBackupState->rpcState, VMBACKUP_RPC_STATE_ERROR);
 |  | ||||||
| +      gBackupState->rpcState = VMBACKUP_RPC_STATE_ERROR;
 |  | ||||||
| +   }
 |  | ||||||
| +
 |  | ||||||
| +   return success;
 |  | ||||||
| +}
 |  | ||||||
| +
 |  | ||||||
| +
 |  | ||||||
|  /** |  | ||||||
|   * Cleans up the backup state object and sends a "done" event to the VMX. |  | ||||||
|   */ |  | ||||||
| @@ -1361,7 +1388,7 @@ VmBackupDumpState(gpointer src,
 |  | ||||||
|   |  | ||||||
|   |  | ||||||
|  /** |  | ||||||
| - * Reset callback.
 |  | ||||||
| + * Reset callback.  Currently does nothing.
 |  | ||||||
|   * |  | ||||||
|   * @param[in]  src      The source object.  Unused. |  | ||||||
|   * @param[in]  ctx      Unused. |  | ||||||
| @@ -1373,7 +1400,7 @@ VmBackupReset(gpointer src,
 |  | ||||||
|                ToolsAppCtx *ctx, |  | ||||||
|                gpointer data) |  | ||||||
|  { |  | ||||||
| -   VmBackup_SyncDriverReset();
 |  | ||||||
| +
 |  | ||||||
|  } |  | ||||||
|   |  | ||||||
|   |  | ||||||
| diff --git a/services/plugins/vmbackup/syncDriverOps.c b/services/plugins/vmbackup/syncDriverOps.c
 |  | ||||||
| index 1dd98e323..d659f1b41 100644
 |  | ||||||
| --- a/services/plugins/vmbackup/syncDriverOps.c
 |  | ||||||
| +++ b/services/plugins/vmbackup/syncDriverOps.c
 |  | ||||||
| @@ -761,26 +761,3 @@ VmBackup_NewSyncDriverOnlyProvider(void)
 |  | ||||||
|  } |  | ||||||
|   |  | ||||||
|  #endif |  | ||||||
| -
 |  | ||||||
| -
 |  | ||||||
| -/*
 |  | ||||||
| - *-----------------------------------------------------------------------------
 |  | ||||||
| - *
 |  | ||||||
| - * VmBackup_SyncDriverReset --
 |  | ||||||
| - *
 |  | ||||||
| - *    Reset function
 |  | ||||||
| - *
 |  | ||||||
| - * Results:
 |  | ||||||
| - *    None.
 |  | ||||||
| - *
 |  | ||||||
| - * Side effects:
 |  | ||||||
| - *    Whatever are the side effects of what it calls.
 |  | ||||||
| - *
 |  | ||||||
| - *-----------------------------------------------------------------------------
 |  | ||||||
| - */
 |  | ||||||
| -
 |  | ||||||
| -void
 |  | ||||||
| -VmBackup_SyncDriverReset(void)
 |  | ||||||
| -{
 |  | ||||||
| -   SyncManifestReset();
 |  | ||||||
| -}
 |  | ||||||
| diff --git a/services/plugins/vmbackup/syncManifest.c b/services/plugins/vmbackup/syncManifest.c
 |  | ||||||
| index 224f7e8aa..4586c4c34 100644
 |  | ||||||
| --- a/services/plugins/vmbackup/syncManifest.c
 |  | ||||||
| +++ b/services/plugins/vmbackup/syncManifest.c
 |  | ||||||
| @@ -1,5 +1,5 @@
 |  | ||||||
|  /********************************************************* |  | ||||||
| - * Copyright (C) 2017-2018 VMware, Inc. All rights reserved.
 |  | ||||||
| + * Copyright (C) 2017-2019 VMware, Inc. All rights reserved.
 |  | ||||||
|   * |  | ||||||
|   * This program is free software; you can redistribute it and/or modify it |  | ||||||
|   * under the terms of the GNU Lesser General Public License as published |  | ||||||
| @@ -49,12 +49,6 @@ static const char syncManifestFmt[] = {
 |  | ||||||
|   */ |  | ||||||
|  static const char syncManifestSwitch[] = "enableXmlManifest"; |  | ||||||
|   |  | ||||||
| -/*
 |  | ||||||
| - * If TRUE, indicates that VMTools should try to generate the backup
 |  | ||||||
| - * manifest and send it to VMX; if FALSE, it won't try to do so.
 |  | ||||||
| - */
 |  | ||||||
| -static Bool gSyncManifestTrySend = TRUE;
 |  | ||||||
| -
 |  | ||||||
|   |  | ||||||
|  /* |  | ||||||
|   *----------------------------------------------------------------------------- |  | ||||||
| @@ -95,12 +89,6 @@ SyncNewManifest(VmBackupState *state,          // IN
 |  | ||||||
|        return NULL; |  | ||||||
|     } |  | ||||||
|   |  | ||||||
| -   if (!gSyncManifestTrySend) {
 |  | ||||||
| -      g_debug("No backup manifest generated since previous"
 |  | ||||||
| -              " attempt to send one to host failed.\n");
 |  | ||||||
| -      return NULL;
 |  | ||||||
| -   }
 |  | ||||||
| -
 |  | ||||||
|     manifest = g_new0(SyncManifest, 1); |  | ||||||
|     manifest->path = g_strdup_printf("%s/%s", state->configDir, |  | ||||||
|                                      syncManifestName); |  | ||||||
| @@ -173,37 +161,14 @@ SyncManifestSend(SyncManifest *manifest)       // IN
 |  | ||||||
|        return FALSE; |  | ||||||
|     } |  | ||||||
|   |  | ||||||
| -   if (!VmBackup_SendEvent(VMBACKUP_EVENT_GENERIC_MANIFEST,
 |  | ||||||
| -                           VMBACKUP_SUCCESS, manifest->path)) {
 |  | ||||||
| -      g_warning("Host doesn't appear to support backup manifests "
 |  | ||||||
| -                "for Linux guests.\n");
 |  | ||||||
| -      gSyncManifestTrySend = FALSE;
 |  | ||||||
| +   if (!VmBackup_SendEventNoAbort(VMBACKUP_EVENT_GENERIC_MANIFEST,
 |  | ||||||
| +                                  VMBACKUP_SUCCESS, manifest->path)) {
 |  | ||||||
| +      /* VmBackup_SendEventNoAbort logs the error */
 |  | ||||||
| +      g_info("Non-fatal error occurred while sending %s, continuing "
 |  | ||||||
| +             "with the operation", VMBACKUP_EVENT_GENERIC_MANIFEST);
 |  | ||||||
|        return FALSE; |  | ||||||
|     } |  | ||||||
|   |  | ||||||
|     g_debug("Backup manifest was sent successfully.\n"); |  | ||||||
|     return TRUE; |  | ||||||
|  } |  | ||||||
| -
 |  | ||||||
| -
 |  | ||||||
| -/*
 |  | ||||||
| - *-----------------------------------------------------------------------------
 |  | ||||||
| - *
 |  | ||||||
| - * SyncManifestReset --
 |  | ||||||
| - *
 |  | ||||||
| - *    Reset SyncManifest global state
 |  | ||||||
| - *
 |  | ||||||
| - * Results:
 |  | ||||||
| - *    None
 |  | ||||||
| - *
 |  | ||||||
| - * Side effects:
 |  | ||||||
| - *    None
 |  | ||||||
| - *
 |  | ||||||
| - *-----------------------------------------------------------------------------
 |  | ||||||
| - */
 |  | ||||||
| -
 |  | ||||||
| -void
 |  | ||||||
| -SyncManifestReset(void)
 |  | ||||||
| -{
 |  | ||||||
| -   gSyncManifestTrySend = TRUE;
 |  | ||||||
| -}
 |  | ||||||
| diff --git a/services/plugins/vmbackup/syncManifest.h b/services/plugins/vmbackup/syncManifest.h
 |  | ||||||
| index 9e4e9eb30..fd226adbd 100644
 |  | ||||||
| --- a/services/plugins/vmbackup/syncManifest.h
 |  | ||||||
| +++ b/services/plugins/vmbackup/syncManifest.h
 |  | ||||||
| @@ -1,5 +1,5 @@
 |  | ||||||
|  /********************************************************* |  | ||||||
| - * Copyright (C) 2017-2018 VMware, Inc. All rights reserved.
 |  | ||||||
| + * Copyright (C) 2017-2019 VMware, Inc. All rights reserved.
 |  | ||||||
|   * |  | ||||||
|   * This program is free software; you can redistribute it and/or modify it |  | ||||||
|   * under the terms of the GNU Lesser General Public License as published |  | ||||||
| @@ -45,9 +45,6 @@ SyncManifestSend(SyncManifest *manifest);
 |  | ||||||
|  void |  | ||||||
|  SyncManifestRelease(SyncManifest *manifest); |  | ||||||
|   |  | ||||||
| -void
 |  | ||||||
| -SyncManifestReset(void);
 |  | ||||||
| -
 |  | ||||||
|  #else /* !defined(__linux__) */ |  | ||||||
|   |  | ||||||
|  typedef void SyncManifest; |  | ||||||
| @@ -55,7 +52,6 @@ typedef void SyncManifest;
 |  | ||||||
|  #define SyncNewManifest(s, h)            (NULL) |  | ||||||
|  #define SyncManifestSend(m)              (TRUE) |  | ||||||
|  #define SyncManifestRelease(m)           ASSERT(m == NULL) |  | ||||||
| -#define SyncManifestReset()
 |  | ||||||
|   |  | ||||||
|  #endif /* defined(__linux__) */ |  | ||||||
|   |  | ||||||
| diff --git a/services/plugins/vmbackup/vmBackupInt.h b/services/plugins/vmbackup/vmBackupInt.h
 |  | ||||||
| index 4258ee0ae..97fef2142 100644
 |  | ||||||
| --- a/services/plugins/vmbackup/vmBackupInt.h
 |  | ||||||
| +++ b/services/plugins/vmbackup/vmBackupInt.h
 |  | ||||||
| @@ -303,8 +303,11 @@ VmBackup_SendEvent(const char *event,
 |  | ||||||
|                     const uint32 code, |  | ||||||
|                     const char *desc); |  | ||||||
|   |  | ||||||
| -void
 |  | ||||||
| -VmBackup_SyncDriverReset(void);
 |  | ||||||
| +
 |  | ||||||
| +Bool
 |  | ||||||
| +VmBackup_SendEventNoAbort(const char *event,
 |  | ||||||
| +                          const uint32 code,
 |  | ||||||
| +                          const char *desc);
 |  | ||||||
|   |  | ||||||
|  #endif /* _VMBACKUPINT_H_*/ |  | ||||||
|   |  | ||||||
| diff --git a/services/plugins/vmbackup/syncManifest.c b/services/plugins/vmbackup/syncManifest.c
 |  | ||||||
| index 4586c4c34..ddc995903 100644
 |  | ||||||
| --- a/services/plugins/vmbackup/syncManifest.c
 |  | ||||||
| +++ b/services/plugins/vmbackup/syncManifest.c
 |  | ||||||
| @@ -27,6 +27,7 @@
 |  | ||||||
|  #include "syncDriver.h" |  | ||||||
|  #include "syncManifest.h" |  | ||||||
|  #include "vm_tools_version.h" |  | ||||||
| +#include "vmware/tools/log.h"
 |  | ||||||
|   |  | ||||||
|  #include <unistd.h> |  | ||||||
|  #include <stdio.h> |  | ||||||
							
								
								
									
										2
									
								
								sources
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								sources
									
									
									
									
									
								
							| @ -1 +1 @@ | |||||||
| SHA512 (open-vm-tools-10.3.5-10430147.tar.gz) = 2f2b3d9a8d39b01904cf845936b51a468ba61a29ca64635f842451ca9fd90bf5a770967e4c332319327c6f920ac4fb06d304e185c18ab8898aeb4fcd491a4a1f | SHA512 (open-vm-tools-10.3.10-12406962.tar.gz) = fd35794896c2de5a3b6c7fad0e86558ae0f16c7ab09c791d0d9b8a61cff8052d3d5fcfd19613f793251050f86edda2335b29f49503b3fee41f48495b2ab80a0a | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user