host/config/configurevxagentproxy.cpp (2,042 lines of code) (raw):
//
// configurevxagentproxy.cpp: used by VxAgent to get local & remote settings
//
#include <iostream>
#include <ace/Mutex.h>
#include <ace/Guard_T.h>
#include "configurevxagentproxy.h"
#include "localconfigurator.h"
#include "prismsettings.h"
#include "volumegroupsettings.h"
#include "initialsettings.h"
#include "serializecdpsnapshotrequest.h"
#include "serializevolumegroupsettings.h"
#include "serializeretentioninformation.h"
#include "xmlizecdpsnapshotrequest.h"
#include "xmlizevolumegroupsettings.h"
#include "xmlizeretentioninformation.h"
#include "apinames.h"
#include "serializer.h"
#include "inm_md5.h"
//#ifdef SV_FABRIC
#include "serializeatconfigmanagersettings.h"
#include "xmlizeatconfigmanagersettings.h"
//#endif
#include "AgentHealthContract.h"
using namespace std;
/*
Snapshot Request APIs list:
ConfigureVxAgentProxy::getSnapshotRequestFromCx
ConfigureVxAgentProxy::notifyCxOnSnapshotStatus
ConfigureVxAgentProxy::notifyCxOnSnapshotProgress
ConfigureVxAgentProxy::isSnapshotAborted
ConfigureVxAgentProxy::makeSnapshotActive
ConfigureVxAgentProxy::getSnapshotRequests
*/
/*const char UPDATE_AGENT_LOG[] = "updateAgentLog";
// Bug #6298
const char UPDATE_REPLICATION_STATE_STATUS[] = "updateReplicationStateStatus";
const char UPDATE_REPLICATION_CLEANUP_STATUS[] = "updateReplicationCleanupStatus";
const char UPDATE_RESTART_RESYNC_CLEANUP_STATUS[] = "restartReplicationUpdate";
const char RENAME_CLUSTER_GROUP[] = "renameClusterGroup";
const char DELETE_VOLUMES_FROM_CLUSTER[] = "deleteVolumesFromCluster";
const char DELETE_CLUSTER_NODE[] = "deleteClusterNode";
const char ADD_VOLUMES_TO_CLUSTER[] = "addVolumesToCluster";
const char GET_VOLUME_CHECKPOINT[] = "getVolumeCheckpoint";
const char SET_RESYNC_PROGRESS[] = "setResyncProgress";*/
/* Added by BSR fast sync TBC */
//const char SET_RESYNC_PROGRESS_FASTSYNC[] = "setResyncProgressFastsync" ;
/*
* Added Following strings to fix overshoot issue using bitmap
* By Suresh
*/
/*const char SET_RESYNC_UPDATE_PROGRESS_BYTES_FASTSYNC[]="setResyncProgressBytesFast";
const char SET_RESYNC_UPDATE_FULLSYNC_BYTES_FASTSYNC[]="setHcdProgressBytesFast";
const char SET_RESYNC_UPDATE_MATCHED_BYTES_FASTSYNC[] = "setResyncMatchedBytesFast" ;
const char SET_RESYNC_UPDATE_FULLY_UNUSED_BYTES_FASTSYNC[] = "setResyncFullyUnusedBytesFast" ;
//Changes End
const char GET_VOLUME_CHECKPOINT_FASTSYNC[] = "getVolumeCheckpointFastsync" ;
const char SET_RESYNC_TRANSITION[] = "setResyncTransitionStepOneToTwo" ; */
/* End of the change*/
/*const char GET_INITIAL_SYNC_DIRECTORIES[] = "getInitialSyncDirectories";
const char GET_TARGET_REPLICATION_JOB_ID[] = "getTargetReplicationJobId";
const char UPDATE_VOLUME_ATTRIBUTE[] = "updateVolumeAttribute";
const char GET_CURRENT_VOLUME_ATTRIBUTE[] = "getCurrentVolumeAttribute";
const char UPDATE_LOG_AVAILABLE[] = "updateLogAvailable";
const char UPDATE_CDP_INFORMATIONV2[] = "updateCdpInformationV2";
const char UPDATE_CDP_DISKUSAGE[] = "updateCdpDiskUsage";
const char UPDATE_RETENTION_TAG[] = "updateRetentionTag";
const char GET_HOST_RETENTION_WINDOW[] = "getHostDbRetentionWindows";
const char UPDATE_RETENTION_INFO[] = "updateRetentionDetails";
const char GET_CLEAR_DIFFS[] = "getClearDiffs";
const char SET_TARGET_RESYNC_REQUIRED[] = "SetTargetResyncRequired";
const char SET_SOURCE_RESYNC_REQUIRED[] = "setSourceResyncRequired";
const char SET_PRISM_RESYNC_REQUIRED[] = "setPrismResyncRequired";
const char SET_XS_POOL_SOURCE_RESYNC_REQUIRED[] = "setXsPoolSourceResyncRequired";
const char PAUSE_REPLICATION_FROM_HOST[] = "pauseReplicationFromHost";
const char RESUME_REPLICATION_FROM_HOST[] = "resumeReplicationFromHost";
const char UPDATE_SNAPSHOT_STATUS[] = "updateSnapshotStatus";
const char UPDATE_PENDINGDATA_ONTARGET[] = "updatePendingDataOnTarget";
const char UPDATE_SNAPSHOT_PROGRESS[] = "updateSnapshotProgress";
const char UPDATE_SNAPSHOT_CREATION[] = "updateSnapshotCreation";
const char UPDATE_SNAPSHOT_DELETION[] = "deleteCdpcliVirtualSnapshot";
const char MAKE_ACTIVE_SNAPSHOT_INSTANCE[] = "makeActiveSnapshotInstance";
const char GET_RESYNC_START_TIMESTAMP[] = "get_stats_resyncTimeTag";
const char SEND_RESYNC_START_TIMESTAMP[] = "set_resync_start_time_stamp";
const char UPDATE_MIRROR_STATE[] = "update_mirror_state";
const char UPDATE_LASTIO_TIMESTAMP_ON_ATLUN[] = "update_lastio_timestamp_on_atlun";
const char UPDATE_VOLUMES_PENDING_CHANGES[] = "update_source_pending_changes";
const char GET_RESYNC_END_TIMESTAMP[] = "get_stats_resyncTimeTag";
const char SEND_RESYNC_END_TIMESTAMP[] = "set_resync_end_time_stamp";*/
/* Added by BSR for Fast Sync TBC */
/*const char GET_RESYNC_START_TIMESTAMP_FASTSYNC[] = "get_stats_resyncTimeTag_fastsync";
const char SEND_RESYNC_START_TIMESTAMP_FASTSYNC[] = "set_resync_start_time_stamp_fastsync";
const char GET_RESYNC_END_TIMESTAMP_FASTSYNC[] = "get_stats_resyncTimeTag_fastsync";
const char SEND_RESYNC_END_TIMESTAMP_FASTSYNC[] = "set_resync_end_time_stamp_fastsync";*/
/*End of the changes*/
/*
const char SEND_END_QUASI_STATE_REQUEST[] = "setEndQuasiStateRequest";
const char SEND_ALERT_TO_CX[] = "updateAgentLog";
const char VSNAP_REMOUNT_VOLUMES[] = "getVsnapDrivesMounted";
const char NOTIFY_CX_DIFFS_DRAINED[] = "updateOutpostAgentStatus";
const char DELETE_VIRTUAL_SNAPSHOT[] = "deleteVirtualSnapshot";
const char CDP_STOP_REPLICATION[] = "cdpStopReplication";
const char GET_VIRTUAL_SERVER_NAME[] = "getVirtualServerName";
const char REGISTER_CLUSTER_INFO[] = "registerClusterInfo";
const char REGISTER_XS_INFO[] = "registerXsInfo";
const char GET_FABRIC_SERVICE_SETTING[] = "getFabricServiceSetting";
const char GET_PRISM_SERVICE_SETTING[] = "getPrismServiceSetting";
const char GET_FABRIC_SERVICE_SETTING_ON_REBOOT[] = "getFabricServiceSettingOnReboot";
const char UPDATE_APPLIANCE_LUN_STATE[] = "updateApplianceLunState";
const char UPDATE_PRISM_APPLIANCE_LUN_STATE[] = "updatePrismApplianceLunState";
const char UPDATE_DEVICE_LUN_STATE[] = "updateDeviceLunState";
const char UPDATE_BINDING_DEVICE_DISCOVERY_STATE[] = "updateBindingDeviceDiscoveryState";
const char REGISTER_INITIATORS[] = "registerInitiators";
const char SET_LAST_RESYNC_OFFSET_DIRECTSYNC[] = "set_lastresync_directsync";
const char UPDATE_GROUP_INFO_LIST_STATE[] = "updateGroupInfoListState";
const char SET_PAUSE_REPLICATION_STATUS[] = "setPauseReplicationStatus";*/
/*
ConfigureVxAgentProxy
private:
LocalConfigurator& m_localConfigurator;
ConfiguratorDeferredProcedureCall const m_dpc;
ConfiguratorTransport const& m_transport;
};
*/
// getReplicationPairs();
// getReplicationPairManager();
// getVolumeGroups();
// getVolumes();
// getSnapshotManager();
// getVxTransport();
// getRetentionManager();
// setHostInfo( hostname, ipaddress, os, agentVersion, driverVersion );
// updateAgentLog( string );
string ConfigureVxAgentProxy::getCacheDirectory() const {
return m_localConfigurator.getCacheDirectory();
}
string ConfigureVxAgentProxy::getHostId() const {
return m_localConfigurator.getHostId();
}
string ConfigureVxAgentProxy::getResourceId() const {
return m_localConfigurator.getResourceId();
}
string ConfigureVxAgentProxy::getSourceGroupId() const {
return m_localConfigurator.getSourceGroupId();
}
int ConfigureVxAgentProxy::getMaxDifferentialPayload() const {
return m_localConfigurator.getMaxDifferentialPayload();
}
SV_UINT ConfigureVxAgentProxy::getFastSyncReadBufferSize() const {
return m_localConfigurator.getFastSyncReadBufferSize();
}
SV_HOST_AGENT_TYPE ConfigureVxAgentProxy::getAgentType() const {
return m_localConfigurator.getAgentType();
}
ConfigureVxTransport& ConfigureVxAgentProxy::getVxTransport() {
return m_localConfigurator;
}
std::string ConfigureVxAgentProxy::getLogPathname() const {
return m_localConfigurator.getLogPathname();
}
SV_LOG_LEVEL ConfigureVxAgentProxy::getLogLevel() const {
return m_localConfigurator.getLogLevel();
}
void ConfigureVxAgentProxy::setLogLevel(SV_LOG_LEVEL logLevel) const {
m_localConfigurator.setLogLevel(logLevel);
}
int ConfigureVxAgentProxy::getDelayBetweenAppShutdownAndTagIssue() const {
return m_localConfigurator.getDelayBetweenAppShutdownAndTagIssue();
}
int ConfigureVxAgentProxy::getMaxWaitTimeForTagArrival() const {
return m_localConfigurator.getMaxWaitTimeForTagArrival();
}
//Added by Ranjan bug#10404 (XenServer Registration)
int ConfigureVxAgentProxy::getMaxWaitTimeForXenRegistration() const {
return m_localConfigurator.getMaxWaitTimeForXenRegistration();
}
int ConfigureVxAgentProxy::getMaxWaitTimeForLvActivation() const {
return m_localConfigurator.getMaxWaitTimeForLvActivation();
}
int ConfigureVxAgentProxy::getMaxWaitTimeForDisplayVmVdiInfo() const {
return m_localConfigurator.getMaxWaitTimeForDisplayVmVdiInfo();
}
int ConfigureVxAgentProxy::getMaxWaitTimeForCxStatusUpdate() const {
return m_localConfigurator.getMaxWaitTimeForCxStatusUpdate();
}
//end of change
void ConfigureVxAgentProxy::setDelayBetweenAppShutdownAndTagIssue( int delayBetweenAppShutdownAndTagIssue ) const {
m_localConfigurator.setDelayBetweenAppShutdownAndTagIssue( delayBetweenAppShutdownAndTagIssue );
}
void ConfigureVxAgentProxy::setMaxWaitTimeForTagArrival( int noOfSecondsToWaitForTagArrival ) const {
m_localConfigurator.setMaxWaitTimeForTagArrival( noOfSecondsToWaitForTagArrival );
}
std::string ConfigureVxAgentProxy::getDiffSourceExePathname() const {
return m_localConfigurator.getDiffSourceExePathname();
}
std::string ConfigureVxAgentProxy::getDataProtectionExePathname() const {
return m_localConfigurator.getDataProtectionExePathname();
}
std::string ConfigureVxAgentProxy::getDataProtectionExeV2Pathname() const
{
return m_localConfigurator.getDataProtectionExeV2Pathname() ;
}
std::string ConfigureVxAgentProxy::getOffloadSyncPathname() const {
return m_localConfigurator.getOffloadSyncPathname();
}
std::string ConfigureVxAgentProxy::getOffloadSyncSourceDirectory() const{
return m_localConfigurator.getOffloadSyncSourceDirectory();
}
std::string ConfigureVxAgentProxy::getOffloadSyncCacheDirectory() const{
return m_localConfigurator.getOffloadSyncCacheDirectory();
}
std::string ConfigureVxAgentProxy::getOffloadSyncFilenamePrefix() const{
return m_localConfigurator.getOffloadSyncFilenamePrefix();
}
std::string ConfigureVxAgentProxy::getDiffTargetExePathname() const {
return m_localConfigurator.getDiffTargetExePathname();
}
std::string ConfigureVxAgentProxy::getDiffTargetSourceDirectoryPrefix() const {
return m_localConfigurator.getDiffTargetSourceDirectoryPrefix();
}
std::string ConfigureVxAgentProxy::getDiffTargetCacheDirectoryPrefix() const {
return m_localConfigurator.getDiffTargetCacheDirectoryPrefix();
}
std::string ConfigureVxAgentProxy::getDiffTargetFilenamePrefix() const {
return m_localConfigurator.getDiffTargetFilenamePrefix();
}
std::string ConfigureVxAgentProxy::getFastSyncExePathname() const {
return m_localConfigurator.getFastSyncExePathname();
}
int ConfigureVxAgentProxy::getFastSyncBlockSize() const {
return m_localConfigurator.getFastSyncBlockSize();
}
int ConfigureVxAgentProxy::getFastSyncMaxChunkSize() const {
return m_localConfigurator.getFastSyncMaxChunkSize();
}
int ConfigureVxAgentProxy::getFastSyncMaxChunkSizeForE2A() const {
return m_localConfigurator.getFastSyncMaxChunkSizeForE2A();
}
bool ConfigureVxAgentProxy::getUseConfiguredHostname() const {
return m_localConfigurator.getUseConfiguredHostname();
}
void ConfigureVxAgentProxy::setUseConfiguredHostname(bool flag) const {
return m_localConfigurator.setUseConfiguredHostname(flag);
}
bool ConfigureVxAgentProxy::getUseConfiguredIpAddress() const {
return m_localConfigurator.getUseConfiguredIpAddress();
}
void ConfigureVxAgentProxy::setUseConfiguredIpAddress(bool flag) const {
return m_localConfigurator.setUseConfiguredIpAddress(flag);
}
std::string ConfigureVxAgentProxy::getConfiguredHostname() const {
return m_localConfigurator.getConfiguredHostname();
}
void ConfigureVxAgentProxy::setConfiguredHostname(const std::string &hostName) const {
m_localConfigurator.setConfiguredHostname(hostName);
}
std::string ConfigureVxAgentProxy::getConfiguredIpAddress() const {
return m_localConfigurator.getConfiguredIpAddress();
}
bool ConfigureVxAgentProxy::isMobilityAgent() const {
return m_localConfigurator.isMobilityAgent();
}
bool ConfigureVxAgentProxy::isMasterTarget() const {
return m_localConfigurator.isMasterTarget();
}
void ConfigureVxAgentProxy::setConfiguredIpAddress(const std::string &ipAddress) const {
return m_localConfigurator.setConfiguredIpAddress(ipAddress);
}
std::string ConfigureVxAgentProxy::getExternalIpAddress() const {
return m_localConfigurator.getExternalIpAddress();
}
int ConfigureVxAgentProxy::getFastSyncHashCompareDataSize() const {
return m_localConfigurator.getFastSyncHashCompareDataSize();
}
std::string ConfigureVxAgentProxy::getResyncSourceDirectoryPath() const {
return m_localConfigurator.getResyncSourceDirectoryPath();
}
unsigned int ConfigureVxAgentProxy::getMaxFastSyncApplyThreads() const {
return m_localConfigurator.getMaxFastSyncApplyThreads();
}
int ConfigureVxAgentProxy::getSyncBytesToApplyThreshold( std::string const& vol ) const {
return m_localConfigurator.getSyncBytesToApplyThreshold( vol );
}
bool ConfigureVxAgentProxy::getChunkMode() const {
return m_localConfigurator.getChunkMode();
}
bool ConfigureVxAgentProxy::getHostType() const {
return m_localConfigurator.getHostType();
}
int ConfigureVxAgentProxy::getMaxOutpostThreads() const {
return m_localConfigurator.getMaxOutpostThreads();
}
int ConfigureVxAgentProxy::getVolumeChunkSize() const {
return m_localConfigurator.getVolumeChunkSize();
}
bool ConfigureVxAgentProxy::getRegisterSystemDrive() const {
return m_localConfigurator.getRegisterSystemDrive();
}
int ConfigureVxAgentProxy::getAgentHealthCheckInterval() const {
return m_localConfigurator.getAgentHealthCheckInterval();
}
std::string ConfigureVxAgentProxy::getHealthCollatorDirPath() const {
return m_localConfigurator.getHealthCollatorDirPath();
}
int ConfigureVxAgentProxy::getMarsHealthCheckInterval() const {
return m_localConfigurator.getMarsHealthCheckInterval();
}
int ConfigureVxAgentProxy::getMarsServerUnavailableCheckInterval() const {
return m_localConfigurator.getMarsServerUnavailableCheckInterval();
}
int ConfigureVxAgentProxy::getRegisterHostInterval() const {
return m_localConfigurator.getRegisterHostInterval();
}
int ConfigureVxAgentProxy::getTransportErrorLogInterval() const {
return m_localConfigurator.getTransportErrorLogInterval();
}
int ConfigureVxAgentProxy::getDiskReadErrorLogInterval() const {
return m_localConfigurator.getDiskReadErrorLogInterval();
}
int ConfigureVxAgentProxy::getDiskNotFoundErrorLogInterval() const {
return m_localConfigurator.getDiskNotFoundErrorLogInterval();
}
int ConfigureVxAgentProxy::getMonitorHostStartDelay() const {
return m_localConfigurator.getMonitorHostStartDelay();
}
int ConfigureVxAgentProxy::getMonitorHostInterval() const {
return m_localConfigurator.getMonitorHostInterval();
}
std::string ConfigureVxAgentProxy::getMonitorHostCmdList() const {
return m_localConfigurator.getMonitorHostCmdList();
}
void ConfigureVxAgentProxy::setCacheDirectory(std::string const& value) const {
return m_localConfigurator.setCacheDirectory(value);
}
void ConfigureVxAgentProxy::setDiffTargetCacheDirectoryPrefix(std::string const& value) const {
return m_localConfigurator.setDiffTargetCacheDirectoryPrefix(value);
}
void ConfigureVxAgentProxy::setHttp(HTTP_CONNECTION_SETTINGS s) const {
return m_localConfigurator.setHttp(s);
}
void ConfigureVxAgentProxy::setHostName(std::string const& value) const {
return m_localConfigurator.setHostName(value);
}
void ConfigureVxAgentProxy::setPort(int port) const {
return m_localConfigurator.setPort(port);
}
void ConfigureVxAgentProxy::setMaxOutpostThreads(int n) const {
return m_localConfigurator.setMaxOutpostThreads(n);
}
void ConfigureVxAgentProxy::setVolumeChunkSize(int n) const {
return m_localConfigurator.setVolumeChunkSize(n);
}
void ConfigureVxAgentProxy::setRegisterSystemDrive(bool flag) const {
return m_localConfigurator.setRegisterSystemDrive(flag);
}
SV_ULONG ConfigureVxAgentProxy::getResyncStaleFilesCleanupInterval() const
{
return m_localConfigurator.getResyncStaleFilesCleanupInterval();
}
bool ConfigureVxAgentProxy::ShouldCleanupCorruptSyncFile() const
{
return m_localConfigurator.ShouldCleanupCorruptSyncFile();
}
SV_ULONG ConfigureVxAgentProxy::getResyncUpdateInterval() const
{
return m_localConfigurator.getResyncUpdateInterval() ;
}
SV_ULONG ConfigureVxAgentProxy::getIRMetricsReportInterval() const
{
return m_localConfigurator.getIRMetricsReportInterval();
}
SV_ULONG ConfigureVxAgentProxy::getLogResyncProgressInterval() const
{
return m_localConfigurator.getLogResyncProgressInterval();
}
SV_ULONG ConfigureVxAgentProxy::getResyncSlowProgressThreshold() const
{
return m_localConfigurator.getResyncSlowProgressThreshold();
}
SV_ULONG ConfigureVxAgentProxy::getResyncNoProgressThreshold() const
{
return m_localConfigurator.getResyncNoProgressThreshold();
}
bool ConfigureVxAgentProxy::updateAgentLog(std::string const& timestamp,std::string const& loglevel,
std::string const& agentInfo,
std::string const& errorString ) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(UPDATE_AGENT_LOG, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, timestamp,loglevel,agentInfo,errorString );
m_transport( sr );
return sr.UnSerialize<bool>();
}
// Bug #6298
bool ConfigureVxAgentProxy::updateReplicationStateStatus(const std::string& deviceName, VOLUME_SETTINGS::PAIR_STATE state) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(UPDATE_REPLICATION_STATE_STATUS, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, deviceName, state );
m_transport( sr );
return sr.UnSerialize<bool>();
}
bool ConfigureVxAgentProxy::updateCleanUpActionStatus(const std::string& deviceName, const std::string & cleanupstr) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(UPDATE_REPLICATION_CLEANUP_STATUS, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, deviceName, cleanupstr );
m_transport( sr );
return sr.UnSerialize<bool>();
}
bool ConfigureVxAgentProxy::updateRestartResyncCleanupStatus(const std::string& deviceName, bool& success, const std::string& error_message) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(UPDATE_RESTART_RESYNC_CLEANUP_STATUS, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, deviceName, success, error_message );
m_transport( sr );
return sr.UnSerialize<bool>();
}
bool ConfigureVxAgentProxy::setPauseReplicationStatus(const std::string& deviceName, int hosttype, const std::string & respstr) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(SET_PAUSE_REPLICATION_STATUS, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, deviceName, hosttype, respstr);
m_transport( sr );
return sr.UnSerialize<bool>();
}
void ConfigureVxAgentProxy::renameClusterGroup( std::string const& clusterName,
std::string const& oldGroup, std::string const& newGroup ) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(RENAME_CLUSTER_GROUP, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, clusterName, oldGroup, newGroup );
m_transport( sr );
}
void ConfigureVxAgentProxy::deleteVolumesFromCluster( string const& groupName,
vector<string> const& volumes ) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(DELETE_VOLUMES_FROM_CLUSTER, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, groupName, volumes );
m_transport( sr );
}
void ConfigureVxAgentProxy::deleteClusterNode(string const& clusterName) const {
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(DELETE_CLUSTER_NODE, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, clusterName);
m_transport( sr );
}
void ConfigureVxAgentProxy::addVolumesToCluster( std::string const& groupName,
std::vector<std::string> const& volumes,
std::string const& groupGuid ) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(ADD_VOLUMES_TO_CLUSTER, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, groupName, volumes, groupGuid );
m_transport( sr );
}
JOB_ID_OFFSET ConfigureVxAgentProxy::getVolumeCheckpoint( std::string const & drivename ) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(GET_VOLUME_CHECKPOINT, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, drivename);
m_transport( sr );
return sr.UnSerialize<JOB_ID_OFFSET>();
}
int ConfigureVxAgentProxy::setResyncProgress( std::string deviceName, long long offset, long long bytes, bool matched, std::string jobId, std::string const oldName, std::string newName, std::string deleteName1, std::string deleteName2, std::string agent ) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(SET_RESYNC_PROGRESS, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, deviceName, offset, bytes, matched, jobId,
oldName, newName, deleteName1, deleteName2, agent);
m_transport( sr );
return sr.UnSerialize<int>();
}
/* Added by BSR Fastsync TBC*/
int ConfigureVxAgentProxy::setResyncProgressFastsync( std::string const &sourceHostId,
std::string const &sourceDeviceName,
std::string const &destHostId,
std::string const &destDeviceName,
long long offset,
long long bytes,
bool matched,
std::string jobId,
std::string const oldName,
std::string newName,
std::string deleteName1,
std::string deleteName2 ) const
{
/* TODO: some better way of checking xmlize vs serialize has
* to be found out since whereever m_dpc is being used,
* check is happening two times */
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(SET_RESYNC_PROGRESS_FASTSYNC, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, sourceHostId, sourceDeviceName, destHostId, destDeviceName,
offset, bytes, matched, jobId, oldName, newName, deleteName1, deleteName2);
m_transport( sr );
return sr.UnSerialize<int>();
}
/*
* Added Following functions to fix overshoot issue using bitmap
* By Suresh
*/
int ConfigureVxAgentProxy::SetFastSyncUpdateProgressBytes(std::string const &sourceHostId,
std::string const &sourceDeviceName,
std::string const &destHostId,
std::string const &destDeviceName,
SV_ULONGLONG bytesApplied,
SV_ULONGLONG bytesMatched,
std::string jobId) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(SET_RESYNC_UPDATE_PROGRESS_BYTES_FASTSYNC, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, sourceHostId, sourceDeviceName, destHostId,
destDeviceName, bytesApplied, bytesMatched, jobId);
m_transport( sr );
return sr.UnSerialize<int>();
}
int ConfigureVxAgentProxy::SetFastSyncUpdateProgressBytesWithStats(std::string const &sourceHostId,
std::string const &sourceDeviceName,
std::string const &destHostId,
std::string const &destDeviceName,
const SV_ULONGLONG bytesApplied,
const SV_ULONGLONG bytesMatched,
const std::string &jobId,
const std::string &stats) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(SET_RESYNC_UPDATE_PROGRESS_STATS, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, sourceHostId, sourceDeviceName, destHostId,
destDeviceName, bytesApplied, bytesMatched, jobId, stats);
m_transport(sr);
return sr.UnSerialize<int>();
}
int ConfigureVxAgentProxy::SetFastSyncUpdateFullSyncBytes(std::string const &sourceHostId,
std::string const &sourceDeviceName,
std::string const &destHostId,
std::string const &destDeviceName,
SV_ULONGLONG fullSyncBytesSent,
std::string jobId) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(SET_RESYNC_UPDATE_FULLSYNC_BYTES_FASTSYNC, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, sourceHostId, sourceDeviceName, destHostId,
destDeviceName, fullSyncBytesSent, jobId);
m_transport( sr );
return sr.UnSerialize<int>();
}
int ConfigureVxAgentProxy::SetFastSyncUpdateMatchedBytes( std::string const &sourceHostId,
std::string const &sourceDeviceName,
std::string const &destHostId,
std::string const &destDeviceName,
SV_ULONGLONG bytesMatched,
int during_resyncTransition,
std::string jobId ) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(SET_RESYNC_UPDATE_MATCHED_BYTES_FASTSYNC, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, sourceHostId, sourceDeviceName, destHostId,
destDeviceName, bytesMatched, during_resyncTransition, jobId);
m_transport( sr );
return sr.UnSerialize<int>();
}
int ConfigureVxAgentProxy::SetFastSyncFullyUnusedBytes( std::string const &sourceHostId,
std::string const &sourceDeviceName,
std::string const &destHostId,
std::string const &destDeviceName,
SV_ULONGLONG bytesunused,
std::string jobId ) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(SET_RESYNC_UPDATE_FULLY_UNUSED_BYTES_FASTSYNC, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, sourceHostId, sourceDeviceName, destHostId,
destDeviceName, bytesunused, jobId);
m_transport( sr );
return sr.UnSerialize<int>();
}
// Changes End
JOB_ID_OFFSET ConfigureVxAgentProxy::getVolumeCheckpointFastsync( std::string const &sourceHostId,
std::string const &sourceDeviceName,
std::string const &destHostId,
std::string const &destDeviceName ) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(GET_VOLUME_CHECKPOINT_FASTSYNC, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, sourceHostId, sourceDeviceName, destHostId,
destDeviceName);
m_transport( sr );
return sr.UnSerialize<JOB_ID_OFFSET>();
}
int ConfigureVxAgentProxy::setResyncTransitionStepOneToTwo( std::string const &sourceHostId,
std::string const & sourceDeviceName,
std::string const &destHostId,
std::string const &destDeviceName,
const std::string& jobId,
std::string const &syncNoMoreFile ) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(SET_RESYNC_TRANSITION, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, sourceHostId, sourceDeviceName, destHostId,
destDeviceName, jobId, syncNoMoreFile);
m_transport( sr );
return sr.UnSerialize<int>();
}
ResyncTimeSettings ConfigureVxAgentProxy::getResyncStartTimeStampFastsync( const std::string & sourceHostId,
const std::string& sourceDeviceName,
const std::string& destHostId,
const std::string& destDeviceName,
const std::string & jobId )
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
const char *op = "resyncStartTagtime";
setApiAndFirstArg(GET_RESYNC_START_TIMESTAMP_FASTSYNC, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, sourceHostId, sourceDeviceName, destHostId,
destDeviceName, jobId, op);
m_transport( sr );
return sr.UnSerialize<ResyncTimeSettings>();
}
int ConfigureVxAgentProxy::sendResyncStartTimeStampFastsync( const std::string & sourceHostId,
const std::string& sourceDeviceName,
const std::string& destHostId,
const std::string& destDeviceName,
const std::string & jobId,
const SV_ULONGLONG & ts,
const SV_ULONG & seq )
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(SEND_RESYNC_START_TIMESTAMP_FASTSYNC, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, sourceHostId, sourceDeviceName, destHostId,
destDeviceName, jobId, ts, seq);
m_transport( sr );
return sr.UnSerialize<int>();
}
ResyncTimeSettings ConfigureVxAgentProxy::getResyncEndTimeStampFastsync( const std::string & sourceHostId,
const std::string& sourceDeviceName,
const std::string& destHostId,
const std::string& destDeviceName,
const std::string & jobId )
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
const char *op = "resyncEndTagtime";
setApiAndFirstArg(GET_RESYNC_END_TIMESTAMP_FASTSYNC, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, sourceHostId, sourceDeviceName, destHostId,
destDeviceName, jobId, op);
m_transport( sr );
return sr.UnSerialize<ResyncTimeSettings>();
}
int ConfigureVxAgentProxy::sendResyncEndTimeStampFastsync( const std::string & sourceHostId,
const std::string& sourceDeviceName,
const std::string& destHostId,
const std::string& destDeviceName,
const std::string & jobId,
const SV_ULONGLONG & ts,
const SV_ULONG & seq )
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(SEND_RESYNC_END_TIMESTAMP_FASTSYNC, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, sourceHostId, sourceDeviceName, destHostId,
destDeviceName, jobId, ts, seq);
m_transport( sr );
return sr.UnSerialize<int>();
}
/* End of the change*/
int ConfigureVxAgentProxy::setLastResyncOffsetForDirectSync(const std::string & sourceHostId,
const std::string& sourceDeviceName,
const std::string& destHostId,
const std::string& destDeviceName,
const std::string & jobId,
const SV_ULONGLONG &offset,
const SV_ULONGLONG &filesystemunusedbytes)
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(SET_LAST_RESYNC_OFFSET_DIRECTSYNC, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, sourceHostId, sourceDeviceName, destHostId,
destDeviceName, jobId, offset, filesystemunusedbytes);
m_transport( sr );
return sr.UnSerialize<int>();
}
std::string ConfigureVxAgentProxy::getInitialSyncDirectories() const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(GET_INITIAL_SYNC_DIRECTORIES, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi);
m_transport( sr );
return sr.UnSerialize<std::string>();
}
std::string ConfigureVxAgentProxy::getTargetReplicationJobId( std::string deviceName ) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(GET_TARGET_REPLICATION_JOB_ID, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, deviceName);
m_transport( sr );
return sr.UnSerialize<std::string>();
}
bool ConfigureVxAgentProxy::updateVolumeAttribute(NOTIFY_TYPE notifyType, const std::string &deviceName,VOLUME_STATE volumeState, const std::string &mountPoint) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(UPDATE_VOLUME_ATTRIBUTE, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, notifyType,volumeState,deviceName,mountPoint);
m_transport( sr );
return sr.UnSerialize<bool>();
}
int ConfigureVxAgentProxy::getCurrentVolumeAttribute(std::string deviceName) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(GET_CURRENT_VOLUME_ATTRIBUTE, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, deviceName);
m_transport( sr );
return sr.UnSerialize<int>();
}
bool ConfigureVxAgentProxy::updateLogAvailable(string deviceName,string dateFrom, string dateTo, unsigned long long spaceOccupied, unsigned long long freeSpaceLeft,unsigned long long dateFromUtc, unsigned long long dateToUtc, string diffs) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(UPDATE_LOG_AVAILABLE, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, deviceName,dateFrom,dateTo,spaceOccupied,freeSpaceLeft, dateFromUtc,
dateToUtc, diffs);
m_transport( sr );
return sr.UnSerialize<bool>();
}
bool ConfigureVxAgentProxy::updateCDPInformationV2(const HostCDPInformation & cdpmap) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(UPDATE_CDP_INFORMATIONV2, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, cdpmap);
m_transport( sr );
return sr.UnSerialize<bool>();
}
bool ConfigureVxAgentProxy::updateCdpDiskUsage(const HostCDPRetentionDiskUsage& cdpRetentionDiskUsage,const HostCDPTargetDiskUsage& cdpTargetDiskUsage) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(UPDATE_CDP_DISKUSAGE, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, cdpRetentionDiskUsage,cdpTargetDiskUsage);
m_transport( sr );
return sr.UnSerialize<bool>();
}
bool ConfigureVxAgentProxy::updateRetentionTag(string deviceName,string tagTimeStamp, string appName, string userTag, string actionTag, unsigned short accuracy,std::string identifier,unsigned short verifier,std::string comment) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(UPDATE_RETENTION_TAG, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, deviceName, tagTimeStamp, appName, userTag, actionTag, accuracy,
identifier,verifier,comment );
m_transport( sr );
return sr.UnSerialize<bool>();
}
HostRetentionWindow ConfigureVxAgentProxy::getHostRetentionWindow() const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(GET_HOST_RETENTION_WINDOW, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi);
m_transport( sr );
return sr.UnSerialize<HostRetentionWindow>();
}
bool ConfigureVxAgentProxy::updateRetentionInfo(const HostRetentionInformation& hRetInfo) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(UPDATE_RETENTION_INFO, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, hRetInfo);
m_transport( sr );
return sr.UnSerialize<bool>();
}
bool ConfigureVxAgentProxy::updatePendingDataInfo(const std::map<std::string,SV_ULONGLONG>& pendingDataInfo) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(UPDATE_PENDINGDATA_ONTARGET, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, pendingDataInfo);
m_transport( sr );
return sr.UnSerialize<bool>();
}
bool ConfigureVxAgentProxy::shouldThrottleResync(std::string const& deviceName, const std::string &endpointdeviceName,
const int &grpid) const
{
AutoGuard lock( m_lock );
bool bthrottleresync = false;
bool breakout = false;
HOST_VOLUME_GROUP_SETTINGS::volumeGroups_iterator VolumeGroupSettingsIter;
for ( VolumeGroupSettingsIter = m_settings.hostVolumeSettings.volumeGroups.begin();
(VolumeGroupSettingsIter != m_settings.hostVolumeSettings.volumeGroups.end() && !breakout) ;
VolumeGroupSettingsIter++ )
{
for(VOLUME_GROUP_SETTINGS::volumes_iterator volumes = VolumeGroupSettingsIter->volumes.begin();volumes != VolumeGroupSettingsIter->volumes.end();
volumes++)
{
if (deviceName == volumes->second.deviceName)
{
VOLUME_SETTINGS::endpoints_iterator endPointsIter =
volumes->second.endpoints.begin();
if ( (endPointsIter->deviceName == endpointdeviceName) &&
(grpid == VolumeGroupSettingsIter->id) )
{
bthrottleresync = volumes->second.throttleSettings.IsResyncThrottled();
breakout = true;
break;
}
}
}
}
return bthrottleresync;
}
bool ConfigureVxAgentProxy::shouldThrottleSource(std::string const& deviceName) const
{
AutoGuard lock( m_lock );
bool bthrottlesource = false;
bool breakout = false;
HOST_VOLUME_GROUP_SETTINGS::volumeGroups_iterator VolumeGroupSettingsIter;
for ( VolumeGroupSettingsIter = m_settings.hostVolumeSettings.volumeGroups.begin();
(VolumeGroupSettingsIter != m_settings.hostVolumeSettings.volumeGroups.end() && !breakout) ;
VolumeGroupSettingsIter++ )
{
for(VOLUME_GROUP_SETTINGS::volumes_iterator volumes = VolumeGroupSettingsIter->volumes.begin();volumes != VolumeGroupSettingsIter->volumes.end();
volumes++)
{
if (deviceName == volumes->second.deviceName)
{
bthrottlesource = volumes->second.throttleSettings.IsSourceThrottled();
breakout = true;
break;
}
}
}
return bthrottlesource;
}
bool ConfigureVxAgentProxy::shouldThrottleTarget(std::string const& deviceName) const
{
AutoGuard lock( m_lock );
return m_settings.shouldThrottleTarget(deviceName);
}
bool ConfigureVxAgentProxy::setTargetResyncRequired(const std::string &deviceName, const std::string &errStr,
const ResyncReasonStamp &resyncReasonStamp, const long errorcode) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(SET_TARGET_RESYNC_REQUIRED, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, deviceName, errStr, errorcode, resyncReasonStamp);
m_transport( sr );
return sr.UnSerialize<bool>();
}
bool ConfigureVxAgentProxy::setSourceResyncRequired(const std::string &deviceName, const std::string &errStr,
const ResyncReasonStamp &resyncReasonStamp) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(SET_SOURCE_RESYNC_REQUIRED, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, deviceName, errStr, resyncReasonStamp);
m_transport( sr );
return sr.UnSerialize<bool>();
}
bool ConfigureVxAgentProxy::setPrismResyncRequired( std::string sourceLunID,std::string errStr ) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(SET_PRISM_RESYNC_REQUIRED, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, sourceLunID,errStr);
m_transport( sr );
return sr.UnSerialize<bool>();
}
bool ConfigureVxAgentProxy::setXsPoolSourceResyncRequired( std::string deviceName,std::string errStr ) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(SET_XS_POOL_SOURCE_RESYNC_REQUIRED, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, deviceName,errStr);
m_transport( sr );
return sr.UnSerialize<bool>();
}
bool ConfigureVxAgentProxy::pauseReplicationFromHost( std::string deviceName,std::string errStr ) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(PAUSE_REPLICATION_FROM_HOST, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, deviceName,errStr);
m_transport( sr );
return sr.UnSerialize<bool>();
}
bool ConfigureVxAgentProxy::resumeReplicationFromHost( std::string deviceName,std::string errStr ) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(RESUME_REPLICATION_FROM_HOST, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, deviceName,errStr);
m_transport( sr );
return sr.UnSerialize<bool>();
}
bool ConfigureVxAgentProxy::canClearDifferentials( std::string deviceName ) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(GET_CLEAR_DIFFS, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, deviceName);
m_transport( sr );
return sr.UnSerialize<bool>();
}
int ConfigureVxAgentProxy::getRemoteLogLevel() const {
return m_localConfigurator.getRemoteLogLevel();
}
void ConfigureVxAgentProxy::setRemoteLogLevel(int remoteLogLevel) const {
m_localConfigurator.setRemoteLogLevel (remoteLogLevel);
}
std::string ConfigureVxAgentProxy::getTimeStampsOnlyTag() const
{
return m_localConfigurator.getTimeStampsOnlyTag();
}
std::string ConfigureVxAgentProxy::getDestDir() const
{
return m_localConfigurator.getDestDir();
}
std::string ConfigureVxAgentProxy::getDatExtension() const
{
return m_localConfigurator.getDatExtension();
}
std::string ConfigureVxAgentProxy::getMetaDataContinuationTag() const
{
return m_localConfigurator.getMetaDataContinuationTag();
}
std::string ConfigureVxAgentProxy::getMetaDataContinuationEndTag() const
{
return m_localConfigurator.getMetaDataContinuationEndTag();
}
std::string ConfigureVxAgentProxy::getWriteOrderContinuationTag() const
{
return m_localConfigurator.getWriteOrderContinuationTag();
}
std::string ConfigureVxAgentProxy::getWriteOrderContinuationEndTag() const
{
return m_localConfigurator.getWriteOrderContinuationEndTag();
}
std::string ConfigureVxAgentProxy::getPreRemoteName() const
{
return m_localConfigurator.getPreRemoteName();
}
std::string ConfigureVxAgentProxy::getFinalRemoteName() const
{
return m_localConfigurator.getFinalRemoteName();
}
int ConfigureVxAgentProxy::getThrottleWaitTime()const
{
return m_localConfigurator.getThrottleWaitTime();
}
int ConfigureVxAgentProxy::getSentinelExitTime()const
{
return m_localConfigurator.getSentinelExitTime();
}
int ConfigureVxAgentProxy::getS2DataWaitTime()const
{
return m_localConfigurator.getThrottleWaitTime();
}
int ConfigureVxAgentProxy::getWaitForDBNotify() const
{
return m_localConfigurator.getWaitForDBNotify();
}
// Snapshot Request APIs start from here ...
/*
SNAPSHOT_REQUESTS ConfigureVxAgentProxy::getSnapshotRequestFromCx() const {
AutoGuard lock( m_lock );
return m_snapShotRequests;
}
*/
bool ConfigureVxAgentProxy::notifyCxOnSnapshotStatus(const string &snapId,
int timeval,const SV_ULONGLONG &VsnapId,
const string &errMessage, int status) const
{
Serializer sr(m_serializeType);
const char *api = UPDATE_SNAPSHOT_STATUS;
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(UPDATE_SNAPSHOT_STATUS, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, snapId, timeval, VsnapId, errMessage, status);
m_transport( sr );
return sr.UnSerialize<bool>();
}
bool ConfigureVxAgentProxy::notifyCxOnSnapshotProgress(const string &snapId, int percentage, int rpoint) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(UPDATE_SNAPSHOT_PROGRESS, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, snapId, percentage, rpoint);
m_transport( sr );
return sr.UnSerialize<bool>();
}
std::vector<bool> ConfigureVxAgentProxy::notifyCxOnSnapshotCreation(std::vector<VsnapPersistInfo> const & vsnapInfo) const
{
//Bug #8807
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(UPDATE_SNAPSHOT_CREATION, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, vsnapInfo);
m_transport( sr );
return sr.UnSerialize< std::vector<bool> >();
}
std::vector<bool> ConfigureVxAgentProxy::notifyCxOnSnapshotDeletion(std::vector<VsnapDeleteInfo> const & vsnapInfo) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(UPDATE_SNAPSHOT_DELETION, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, vsnapInfo);
m_transport( sr );
return sr.UnSerialize< std::vector<bool> >();
}
bool ConfigureVxAgentProxy::isSnapshotAborted(const std::string & snapshotId) const
{
AutoGuard lock( m_lock );
if(m_snapShotRequests.find(snapshotId) == m_snapShotRequests.end())
return true;
return false;
}
int ConfigureVxAgentProxy::makeSnapshotActive(const std::string & snapshotId) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(MAKE_ACTIVE_SNAPSHOT_INSTANCE, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, snapshotId);
m_transport( sr );
return sr.UnSerialize<int>();
}
/*
SNAPSHOT_REQUESTS ConfigureVxAgentProxy::getSnapshotRequests(const std::string & vol, const svector_t & bookmarks) const
{
// For time being, we will fetch the latest data from cx.
getSnapshotRequestFromCx();
AutoGuard lock( m_lock );
SNAPSHOT_REQUESTS requests;
SNAPSHOT_REQUESTS::iterator iter_end = m_snapShotRequests.end();
for(SNAPSHOT_REQUESTS::iterator iter= m_snapShotRequests.begin(); iter != iter_end; ++iter)
{
std::string id = (*iter).first;
SNAPSHOT_REQUEST::Ptr ptr = (*iter).second;
FormatVolumeName(ptr -> src);
FormatVolumeName(ptr -> dest);
if(! strcmp(ptr -> src.c_str(),vol.c_str()) ) {
svector_t::iterator prefix_iter = ptr ->bookmarks.begin();
svector_t::iterator prefix_end = ptr ->bookmarks.end();
bool found = false;
if(bookmarks.empty()) {
// return only time based requests
if( ptr -> bookmarks.empty() )
found = true;
} else {
for( ; prefix_iter != prefix_end ; ++prefix_iter) {
string prefix = *prefix_iter;
svector_t::const_iterator bookmarks_iter = bookmarks.begin();
svector_t::const_iterator bookmarks_end = bookmarks.end();
for ( ; bookmarks_iter != bookmarks_end; ++bookmarks_iter) {
string bookmark = *bookmarks_iter;
if( (0 == strncmp(bookmark.c_str(), prefix.c_str(), prefix.length()))) {
found = true;
break;
}
}
if (found)
break;
}
}
if(found) {
SNAPSHOT_REQUEST::Ptr request(ptr);
if(ptr -> operation == SNAPSHOT_REQUEST::ROLLBACK) {
requests.clear();
requests.insert(requests.begin(), SNAPSHOT_REQUEST_PAIR(id, request));
} else {
requests.insert(requests.end(), SNAPSHOT_REQUEST_PAIR(id, request));
}
}
}
}
return requests;
}
*/
// Snapshot Request APIs end here ...
std::string ConfigureVxAgentProxy::getProtectedVolumes() const
{
return m_localConfigurator.getProtectedVolumes();
}
void ConfigureVxAgentProxy::setProtectedVolumes(std::string protectedVolumes) const
{
return m_localConfigurator.setProtectedVolumes(protectedVolumes);
}
ResyncTimeSettings ConfigureVxAgentProxy::getResyncStartTimeStamp(const std::string & volname, const std::string & jobId, const string &hostType)
{
Serializer sr(m_serializeType);
const char *op = "resyncStartTagtime";
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(GET_RESYNC_START_TIMESTAMP, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, volname , jobId, op, hostType);
m_transport( sr );
return sr.UnSerialize<ResyncTimeSettings>();
}
int ConfigureVxAgentProxy::sendResyncStartTimeStamp(const std::string & volname, const std::string & jobId, const SV_ULONGLONG & ts, const SV_ULONG & seq, const string &hostType)
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(SEND_RESYNC_START_TIMESTAMP, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, volname, jobId, ts, seq, hostType);
m_transport( sr );
return sr.UnSerialize<int>();
}
/* zero for success as of other update calls like sending resync start time stamps ... */
int ConfigureVxAgentProxy::updateMirrorState(const std::string &sourceLunID,
const PRISM_VOLUME_INFO::MIRROR_STATE mirrorStateRequested,
const PRISM_VOLUME_INFO::MIRROR_ERROR errCode,
const std::string &errorString)
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(UPDATE_MIRROR_STATE, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, sourceLunID, mirrorStateRequested, errCode, errorString);
m_transport( sr );
return sr.UnSerialize<int>();
}
/* TODO: should there be volume map's device name here ? */
int ConfigureVxAgentProxy::sendLastIOTimeStampOnATLUN(const std::string &sourceVolumeName,
const SV_ULONGLONG ts)
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(UPDATE_LASTIO_TIMESTAMP_ON_ATLUN, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, sourceVolumeName, ts);
m_transport( sr );
return sr.UnSerialize<int>();
}
int ConfigureVxAgentProxy::updateVolumesPendingChanges(const VolumesStats_t &vss, const std::list<std::string>& statsNotAvailableVolumes)
{
Serializer sr(m_serializeType);
const char *api = UPDATE_VOLUMES_PENDING_CHANGES;
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(UPDATE_VOLUMES_PENDING_CHANGES, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, vss, statsNotAvailableVolumes);
m_transport( sr );
return sr.UnSerialize<int>();
}
ResyncTimeSettings ConfigureVxAgentProxy::getResyncEndTimeStamp(const std::string & volname, const std::string & jobId, const string &hostType)
{
Serializer sr(m_serializeType);
const char *op = "resyncEndTagtime";
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(GET_RESYNC_END_TIMESTAMP, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, volname, jobId, op, hostType);
m_transport( sr );
return sr.UnSerialize<ResyncTimeSettings>();
}
int ConfigureVxAgentProxy::sendResyncEndTimeStamp(const std::string & volname, const std::string & jobId, const SV_ULONGLONG & ts, const SV_ULONG & seq, const string &hostType)
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(SEND_RESYNC_END_TIMESTAMP, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, volname, jobId, ts, seq, hostType);
m_transport( sr );
return sr.UnSerialize<int>();
}
int ConfigureVxAgentProxy::sendEndQuasiStateRequest(const std::string & volname) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(SEND_END_QUASI_STATE_REQUEST, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, volname);
m_transport( sr );
return sr.UnSerialize<int>();
}
void ConfigureVxAgentProxy::sendDebugMsgToLocalHostLog(SV_LOG_LEVEL LogLevel, const std::string& szDebugString) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(SEND_DEBUG_MSG_LOCALHOST_LOG, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, LogLevel, szDebugString);
m_transport( sr );
}
void ConfigureVxAgentProxy::ReportAgentHealthStatus(const SourceAgentProtectionPairHealthIssues&healthIssues)
{
DebugPrintf(SV_LOG_DEBUG, "ENTERED %s\n", FUNCTION_NAME);
try
{
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(SOURCE_AGENT_PROTECTION_PAIR_HEALTH_ISSUES, m_dpc.c_str(), &apitocall, &firstargtoapi);
SourceAgentProtectionPairHealthIssues issues = healthIssues;
std::string jsonSerializedAgentHealthIssues;
std::stringstream ssErrMsg;
try {
jsonSerializedAgentHealthIssues = JSON::producer<SourceAgentProtectionPairHealthIssues>::convert(issues);
//remove carriage return \r
jsonSerializedAgentHealthIssues.erase(
std::remove(jsonSerializedAgentHealthIssues.begin(), jsonSerializedAgentHealthIssues.end(), '\r'),
jsonSerializedAgentHealthIssues.end());
//remove line feed \n
jsonSerializedAgentHealthIssues.erase(
std::remove(jsonSerializedAgentHealthIssues.begin(), jsonSerializedAgentHealthIssues.end(), '\n'),
jsonSerializedAgentHealthIssues.end());
DebugPrintf(SV_LOG_DEBUG, "%s: JSON Serialized Health Issues as as string: %s\n", FUNCTION_NAME, jsonSerializedAgentHealthIssues.c_str());
}
catch (JSON::json_exception &je)
{
ssErrMsg.str("");
ssErrMsg << "Failed to serialize agent health issues with error" << je.what();
DebugPrintf(SV_LOG_ERROR, " %s: %s\n", FUNCTION_NAME, ssErrMsg.str().c_str());
return;
}
/// veirfy serialized string is same as previous with md5 checksum
std::string marshlledstr = marshalCxCall(apitocall, firstargtoapi, jsonSerializedAgentHealthIssues);
DebugPrintf(SV_LOG_DEBUG, "Marshalled string of SourceAgentProtectionPairHealthIssues:\n%s\n", marshlledstr.c_str());
unsigned char currhash[HASH_LENGTH];
INM_MD5_CTX ctx;
INM_MD5Init(&ctx);
INM_MD5Update(&ctx, (unsigned char*)marshlledstr.c_str(), marshlledstr.size());
INM_MD5Final(currhash, &ctx);
bool shouldreport = false;
if (comparememory(m_prevAgentHealthStatusHash, currhash, HASH_LENGTH))
{
shouldreport = true;
}
else
{
DebugPrintf(SV_LOG_DEBUG, "Agent health issues checksum matched\n");
}
/// Repeat same issue every 1 hr
static long long s_lastReportTime = 0;
ACE_Time_Value currentTime = ACE_OS::gettimeofday();
if (!s_lastReportTime || (!shouldreport && (currentTime.sec() - s_lastReportTime) > 3600))
{
shouldreport = true;
}
if (shouldreport)
{
if (healthIssues.HealthIssues.empty() && healthIssues.DiskLevelHealthIssues.empty())
{
DebugPrintf(SV_LOG_DEBUG, "No Agent health issues identified.\n");
}
else
{
DebugPrintf(SV_LOG_ALWAYS, "reporting agent health issues: %s\n", marshlledstr.c_str());
}
Serializer sr(m_serializeType);
sr.Serialize(apitocall, firstargtoapi, jsonSerializedAgentHealthIssues);
m_transport(sr);
if (sr.UnSerialize<bool>())
{
inm_memcpy_s(m_prevAgentHealthStatusHash, sizeof(m_prevAgentHealthStatusHash), currhash, sizeof currhash);
s_lastReportTime = ACE_OS::gettimeofday().sec();
DebugPrintf(SV_LOG_DEBUG, "%s: successfuly reported agent health issues: \n%s\n", FUNCTION_NAME, jsonSerializedAgentHealthIssues.c_str());
}
else
{
DebugPrintf(SV_LOG_ERROR, "%s: Failed to send agent health issues. CS API %s failed:\n%s\n\n", FUNCTION_NAME, SOURCE_AGENT_PROTECTION_PAIR_HEALTH_ISSUES, jsonSerializedAgentHealthIssues.c_str());
}
}
}
catch (std::string const& e) {
DebugPrintf(SV_LOG_ERROR, "\n%s: encountered exception %s.\n", FUNCTION_NAME, e.c_str());
}
catch (char const* e) {
DebugPrintf(SV_LOG_ERROR, "\n%s: encountered exception %s.\n", FUNCTION_NAME, e);
}
catch (ContextualException const& ce) {
DebugPrintf(SV_LOG_ERROR, "\n%s: encountered exception %s.\n", FUNCTION_NAME, ce.what());
}
catch (std::exception const& e) {
DebugPrintf(SV_LOG_ERROR, "\n%s encountered exception %s.\n", FUNCTION_NAME, e.what());
}
catch (...) {
DebugPrintf(SV_LOG_ERROR, "\n%s: encountered exception\n", FUNCTION_NAME);
}
}
void ConfigureVxAgentProxy::ReportMarsAgentHealthStatus(const std::list<long>& marsHealth)
{
try
{
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(TARGET_AGENT_PROTECTION_PAIR_HEALTH_ISSUES, m_dpc.c_str(), &apitocall, &firstargtoapi);
Serializer sr(m_serializeType);
sr.Serialize(apitocall, firstargtoapi, marsHealth);
m_transport(sr);
if (sr.UnSerialize<bool>())
{
DebugPrintf(SV_LOG_DEBUG, "%s: successfuly reported MARS agent health issues\n", FUNCTION_NAME);
}
else
{
DebugPrintf(SV_LOG_ERROR, "%s: Failed to send MARS agent health issues. CS API %s failed.\n", FUNCTION_NAME, TARGET_AGENT_PROTECTION_PAIR_HEALTH_ISSUES);
}
}
catch (std::string const& e) {
DebugPrintf(SV_LOG_ERROR, "\n%s: encountered exception %s.\n", FUNCTION_NAME, e.c_str());
}
catch (char const* e) {
DebugPrintf(SV_LOG_ERROR, "\n%s: encountered exception %s.\n", FUNCTION_NAME, e);
}
catch (ContextualException const& ce) {
DebugPrintf(SV_LOG_ERROR, "\n%s: encountered exception %s.\n", FUNCTION_NAME, ce.what());
}
catch (std::exception const& e) {
DebugPrintf(SV_LOG_ERROR, "\n%s encountered exception %s.\n", FUNCTION_NAME, e.what());
}
catch (...) {
DebugPrintf(SV_LOG_ERROR, "\n%s: encountered exception\n", FUNCTION_NAME);
}
}
bool ConfigureVxAgentProxy::sendAlertToCx(const std::string & timeval, const std::string & errLevel, const std::string & agentType, SV_ALERT_TYPE alertType, SV_ALERT_MODULE alertingModule, const InmAlert &alert) const
{
/*
vxstub_update_agent_log ( $obj,$ttime,$log_level,$agent_info,$error_msg,$module = '',$alert_type = '')
*/
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(SEND_ALERT_TO_CX, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, timeval, errLevel, agentType, alert.GetMessage(), alertingModule, alertType, alert.GetID(), alert.GetParameters());
m_transport( sr );
return sr.UnSerialize<bool>();
}
std::string ConfigureVxAgentProxy::getInstallPath() const
{
return m_localConfigurator.getInstallPath();
}
std::string ConfigureVxAgentProxy::getAgentRole() const
{
return m_localConfigurator.getAgentRole();
}
int ConfigureVxAgentProxy::getCxUpdateInterval() const
{
return m_localConfigurator.getCxUpdateInterval();
}
bool ConfigureVxAgentProxy::getIsCXPatched() const
{
return m_localConfigurator.getIsCXPatched();
}
std::string ConfigureVxAgentProxy::getProfileDeviceList() const
{
return m_localConfigurator.getProfileDeviceList();
}
int ConfigureVxAgentProxy::getVolumeRetries() const
{
return m_localConfigurator.getVolumeRetries();
}
int ConfigureVxAgentProxy::getVolumeRetryDelay() const
{
return m_localConfigurator.getVolumeRetryDelay();
}
int ConfigureVxAgentProxy::getEnforcerDelay() const
{
return m_localConfigurator.getEnforcerDelay();
}
void ConfigureVxAgentProxy::setCxUpdateInterval(int interval) const
{
return m_localConfigurator.setCxUpdateInterval(interval);
}
VsnapRemountVolumes ConfigureVxAgentProxy::getVsnapRemountVolumes() const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(VSNAP_REMOUNT_VOLUMES, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi);
m_transport( sr );
return sr.UnSerialize<VsnapRemountVolumes>();
}
SV_ULONG ConfigureVxAgentProxy::getMinCacheFreeDiskSpacePercent() const
{
return m_localConfigurator.getMinCacheFreeDiskSpacePercent();
}
void ConfigureVxAgentProxy::setMinCacheFreeDiskSpacePercent(SV_ULONG percent) const
{
return m_localConfigurator.setMinCacheFreeDiskSpacePercent(percent);
}
SV_ULONGLONG ConfigureVxAgentProxy::getMinCacheFreeDiskSpace() const
{
return m_localConfigurator.getMinCacheFreeDiskSpace();
}
void ConfigureVxAgentProxy::setMinCacheFreeDiskSpace(SV_ULONG space) const
{
return m_localConfigurator.setMinCacheFreeDiskSpace(space);
}
SV_ULONGLONG ConfigureVxAgentProxy::getCMMinReservedSpacePerPair() const
{
return m_localConfigurator.getCMMinReservedSpacePerPair();
}
int ConfigureVxAgentProxy::notifyCxDiffsDrained(const string &driveName, const SV_ULONGLONG& bytesAppliedPerSecond) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(NOTIFY_CX_DIFFS_DRAINED, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, driveName, bytesAppliedPerSecond);
m_transport( sr );
return sr.UnSerialize<int>();
}
int ConfigureVxAgentProxy::getVirtualVolumesId() const
{
return m_localConfigurator.getVirtualVolumesId();
}
void ConfigureVxAgentProxy::setVirtualVolumesId(int id) const
{
m_localConfigurator.setVirtualVolumesId(id);
}
std::string ConfigureVxAgentProxy::getVirtualVolumesPath(string key) const
{
return m_localConfigurator.getVirtualVolumesPath(key);
}
void ConfigureVxAgentProxy::setVirtualVolumesPath(string key, string value) const
{
return m_localConfigurator.setVirtualVolumesPath(key, value);
}
int ConfigureVxAgentProxy::getIdleWaitTime() const
{
return m_localConfigurator.getIdleWaitTime();
}
bool ConfigureVxAgentProxy::deleteVirtualSnapshot(std::string targetVolume, unsigned long long VSnapid, int status, std::string message) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(DELETE_VIRTUAL_SNAPSHOT, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, targetVolume,VSnapid, status, message);
m_transport( sr );
return sr.UnSerialize<bool>();
}
unsigned long long ConfigureVxAgentProxy::getVsnapId() const
{
return m_localConfigurator.getVsnapId();
}
void ConfigureVxAgentProxy::setVsnapId(unsigned long long snapId) const
{
return m_localConfigurator.setVsnapId(snapId);
}
unsigned long long ConfigureVxAgentProxy::getLowLastSnapshotId() const
{
return m_localConfigurator.getLowLastSnapshotId();
}
void ConfigureVxAgentProxy::setLowLastSnapshotId(unsigned long long snapId) const
{
return m_localConfigurator.setLowLastSnapshotId(snapId);
}
unsigned long long ConfigureVxAgentProxy::getHighLastSnapshotId() const
{
return m_localConfigurator.getHighLastSnapshotId();
}
void ConfigureVxAgentProxy::setHighLastSnapshotId(unsigned long long snapId) const
{
return m_localConfigurator.setHighLastSnapshotId(snapId);
}
SV_ULONG ConfigureVxAgentProxy::getMaxMemoryUsagePerReplication() const
{
return m_localConfigurator.getMaxMemoryUsagePerReplication();
}
SV_ULONG ConfigureVxAgentProxy::getMaxRunsPerInvocation() const
{
return m_localConfigurator.getMaxRunsPerInvocation();
}
SV_ULONG ConfigureVxAgentProxy::getMaxInMemoryCompressedFileSize() const
{
return m_localConfigurator.getMaxInMemoryCompressedFileSize();
}
SV_ULONG ConfigureVxAgentProxy::getMaxInMemoryUnCompressedFileSize() const
{
return m_localConfigurator.getMaxInMemoryUnCompressedFileSize();
}
SV_ULONG ConfigureVxAgentProxy::getCompressionChunkSize() const
{
return m_localConfigurator.getCompressionChunkSize();
}
SV_ULONG ConfigureVxAgentProxy::getCompressionBufSize() const
{
return m_localConfigurator.getCompressionBufSize();
}
SV_ULONG ConfigureVxAgentProxy::getSequenceCount() const
{
return m_localConfigurator.getSequenceCount();
}
SV_ULONG ConfigureVxAgentProxy::getSequenceCountInMsecs() const
{
return m_localConfigurator.getSequenceCountInMsecs();
}
SV_ULONG ConfigureVxAgentProxy::getRetentionBufferSize() const
{
return m_localConfigurator.getRetentionBufferSize();
}
bool ConfigureVxAgentProxy::cdpStopReplication(const std::string & volname, const std::string & cleanupaction) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(CDP_STOP_REPLICATION, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, volname, cleanupaction );
m_transport( sr );
return sr.UnSerialize<bool>();
}
bool ConfigureVxAgentProxy::enforceStrictConsistencyGroups() const
{
return m_localConfigurator.enforceStrictConsistencyGroups();
}
string ConfigureVxAgentProxy::getTestValue() const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg("getTestValue", m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi);
m_transport( sr );
return sr.UnSerialize<std::string>();
}
std::string ConfigureVxAgentProxy::getVolumeMountPoint(const std::string & volname) const
{
AutoGuard lock( m_lock );
return m_settings.hostVolumeSettings.getVolumeMountPoint(volname);
}
void ConfigureVxAgentProxy::getVolumeNameAndMountPointForAll(VolumeNameMountPointMap & volumeNameMountPointMap) const
{
AutoGuard lock( m_lock );
m_settings.hostVolumeSettings.getVolumeNameAndMountPointForAll(volumeNameMountPointMap);
}
void ConfigureVxAgentProxy::getVolumeNameAndFileSystemForAll(VolumeNameFileSystemMap &volumeNameFileSystemMap )const
{
AutoGuard lock( m_lock );
m_settings.hostVolumeSettings.getVolumeNameAndFileSystemForAll(volumeNameFileSystemMap);
}
SV_ULONGLONG ConfigureVxAgentProxy::getSourceCapacity(const std::string & volname) const
{
AutoGuard lock( m_lock );
return m_settings.hostVolumeSettings.getSourceCapacity(volname);
}
SV_ULONGLONG ConfigureVxAgentProxy::getSourceRawSize(const std::string & volname) const
{
AutoGuard lock( m_lock );
return m_settings.hostVolumeSettings.getSourceRawSize(volname);
}
std::string ConfigureVxAgentProxy::getSourceFileSystem(const std::string & volname) const
{
AutoGuard lock( m_lock );
return m_settings.hostVolumeSettings.getSourceFileSystem(volname);
}
std::string ConfigureVxAgentProxy::getVirtualServerName(string fieldName) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(GET_VIRTUAL_SERVER_NAME, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, fieldName);
m_transport( sr );
return sr.UnSerialize<std::string>();
}
void ConfigureVxAgentProxy::registerClusterInfo(const std::string & action, const ClusterInfo & clusterInfo) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(REGISTER_CLUSTER_INFO, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, action, clusterInfo);
m_transport( sr );
}
/*void ConfigureVxAgentProxy::registerXsInfo(const std::string & action, const ClusterInfo & xsInfo,
const VMInfos_t & vmInfos, const VDIInfos_t & vdiInfos, int isMaster) const
{
(void) m_transport( marshalCxCall( m_dpc, REGISTER_XS_INFO, action, xsInfo, vmInfos, vdiInfos, isMaster) );
}*/
//Added by ranjan (changing from void to bool for return value of registerXsInfo)
bool ConfigureVxAgentProxy::registerXsInfo(const std::string & action, const ClusterInfo & xsInfo,
const VMInfos_t & vmInfos, const VDIInfos_t & vdiInfos, int isMaster) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(REGISTER_XS_INFO, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, action, xsInfo, vmInfos, vdiInfos, isMaster);
m_transport( sr );
return sr.UnSerialize<bool>();
}
//#ifdef SV_FABRIC
FabricAgentInitialSettings ConfigureVxAgentProxy::getFabricServiceSetting()const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(GET_FABRIC_SERVICE_SETTING, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi);
m_transport( sr );
return sr.UnSerialize<FabricAgentInitialSettings>();
}
PrismAgentInitialSettings ConfigureVxAgentProxy::getPrismServiceSetting()const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(GET_PRISM_SERVICE_SETTING, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi);
m_transport( sr );
return sr.UnSerialize<PrismAgentInitialSettings>();
}
FabricAgentInitialSettings ConfigureVxAgentProxy::getFabricServiceSettingOnReboot()const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(GET_FABRIC_SERVICE_SETTING_ON_REBOOT, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi);
m_transport( sr );
return sr.UnSerialize<FabricAgentInitialSettings>();
}
bool ConfigureVxAgentProxy::updateApplianceLunState(ATLunOperations& atLunOperationState)const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(UPDATE_APPLIANCE_LUN_STATE, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, atLunOperationState);
m_transport( sr );
return sr.UnSerialize<bool>();
}
bool ConfigureVxAgentProxy::updatePrismApplianceLunState(PrismATLunOperations& atLunOperationState)const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(UPDATE_PRISM_APPLIANCE_LUN_STATE, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, atLunOperationState);
m_transport( sr );
return sr.UnSerialize<bool>();
}
bool ConfigureVxAgentProxy::updateDeviceLunState(DeviceLunOperations& deviceLunOperationState)const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(UPDATE_DEVICE_LUN_STATE, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, deviceLunOperationState);
m_transport( sr );
return sr.UnSerialize<bool>();
}
bool ConfigureVxAgentProxy::updateBindingDeviceDiscoveryState(DiscoverBindingDeviceSetting& discoverBindingDeviceSetting)const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(UPDATE_BINDING_DEVICE_DISCOVERY_STATE, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, discoverBindingDeviceSetting);
m_transport( sr );
return sr.UnSerialize<bool>();
}
void ConfigureVxAgentProxy::SanRegisterInitiators(
std::vector<SanInitiatorSummary> const& initiators)const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(REGISTER_INITIATORS, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, initiators);
m_transport( sr );
}
bool ConfigureVxAgentProxy::getShouldS2RenameDiffs() const
{
return m_localConfigurator.getShouldS2RenameDiffs() ;
}
bool ConfigureVxAgentProxy::ShouldProfileDirectSync(void) const
{
return m_localConfigurator.ShouldProfileDirectSync();
}
int ConfigureVxAgentProxy::getS2StrictMode() const
{
return m_localConfigurator.getS2StrictMode() ;
}
unsigned int ConfigureVxAgentProxy::getRepeatingAlertIntervalInSeconds() const
{
return m_localConfigurator.getRepeatingAlertIntervalInSeconds() ;
}
void ConfigureVxAgentProxy::insertRole(std::map<std::string, std::string> &m) const
{
m_localConfigurator.insertRole(m) ;
}
bool ConfigureVxAgentProxy::registerLabelOnDisks() const
{
return m_localConfigurator.registerLabelOnDisks() ;
}
bool ConfigureVxAgentProxy::compareHcd() const
{
return m_localConfigurator.compareHcd() ;
}
unsigned int ConfigureVxAgentProxy::DirectSyncIOBufferCount() const
{
return m_localConfigurator.DirectSyncIOBufferCount();
}
bool ConfigureVxAgentProxy::pipelineReadWriteInDirectSync() const
{
return m_localConfigurator.pipelineReadWriteInDirectSync();
}
SV_ULONGLONG ConfigureVxAgentProxy::getVxAlignmentSize() const
{
return m_localConfigurator.getVxAlignmentSize();
}
unsigned int ConfigureVxAgentProxy::getSourceReadRetries() const
{
return m_localConfigurator.getSourceReadRetries();
}
SV_UINT ConfigureVxAgentProxy::getLengthForFileSystemClustersQuery() const
{
return m_localConfigurator.getLengthForFileSystemClustersQuery() ;
}
bool ConfigureVxAgentProxy::getZerosForSourceReadFailures() const
{
return m_localConfigurator.getZerosForSourceReadFailures();
}
unsigned int ConfigureVxAgentProxy::getSourceReadRetriesInterval() const
{
return m_localConfigurator.getSourceReadRetriesInterval();
}
unsigned long int ConfigureVxAgentProxy::getExpectedMaxDiffFileSize() const
{
return m_localConfigurator.getExpectedMaxDiffFileSize() ;
}
long ConfigureVxAgentProxy::getTransportFlushThresholdForDiff() const
{
return m_localConfigurator.getTransportFlushThresholdForDiff() ;
}
int ConfigureVxAgentProxy::getProfileDiffs() const
{
return m_localConfigurator.getProfileDiffs() ;
}
std::string ConfigureVxAgentProxy::ProfileDifferentialRate() const
{
return m_localConfigurator.ProfileDifferentialRate() ;
}
SV_UINT ConfigureVxAgentProxy::ProfileDifferentialRateInterval() const
{
return m_localConfigurator.ProfileDifferentialRateInterval() ;
}
bool ConfigureVxAgentProxy::getAccountInfo(std::map<std::string, std::string> &namevaluepairs) const
{
return m_localConfigurator.getAccountInfo(namevaluepairs) ;
}
unsigned int ConfigureVxAgentProxy::getWaitTimeForSrcLunsValidity() const
{
return m_localConfigurator.getWaitTimeForSrcLunsValidity() ;
}
unsigned int ConfigureVxAgentProxy::getPendingChangesUpdateInterval() const
{
return m_localConfigurator.getPendingChangesUpdateInterval() ;
}
bool ConfigureVxAgentProxy::shouldIssueScsiCmd() const
{
return m_localConfigurator.shouldIssueScsiCmd() ;
}
std::string ConfigureVxAgentProxy::getCxData() const
{
return m_localConfigurator.getCxData() ;
}
int ConfigureVxAgentProxy::getLogFileXfer() const
{
return m_localConfigurator.getLogFileXfer() ;
}
size_t ConfigureVxAgentProxy::getMetadataReadBufLen() const
{
return m_localConfigurator.getMetadataReadBufLen() ;
}
unsigned long ConfigureVxAgentProxy::getMirrorResyncEventWaitTime() const
{
return m_localConfigurator.getMirrorResyncEventWaitTime() ;
}
int ConfigureVxAgentProxy::getEnableVolumeMonitor() const
{
return m_localConfigurator.getEnableVolumeMonitor() ;
}
//KUMAR: TODO: below code has to be merged with getFabricServiceSettings();
list<TargetModeOperation> ConfigureVxAgentProxy::getTargetModeSettings()const{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg("getTargetModeOperationSettings", m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi);
m_transport( sr );
return sr.UnSerialize< list<TargetModeOperation> >();
}
void ConfigureVxAgentProxy::updateTargetModeStatus(list<TargetModeOperation> tmLunList)const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg("updateTargetModeOperationStatus", m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, tmLunList);
m_transport( sr );
}
void ConfigureVxAgentProxy::updateTargetModeStatusOnReboot(list<TargetModeOperation> tmLunList)const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg("updateTargetModeOperationStatusOnReboot", m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, tmLunList);
m_transport( sr );
}
std::string ConfigureVxAgentProxy::getAgentMode() const
{
return m_localConfigurator.getAgentMode();
}
void ConfigureVxAgentProxy::setAgentMode( std::string mode ) const
{
m_localConfigurator.setAgentMode( mode );
}
bool ConfigureVxAgentProxy::updateGroupInfoListState(AccessCtrlGroupInfo & groupInfo)const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(UPDATE_GROUP_INFO_LIST_STATE, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, groupInfo);
m_transport( sr );
return sr.UnSerialize<bool>();
}
//Added by BSR for parallelising HCD Processing
SV_UINT ConfigureVxAgentProxy::getMaxFastSyncProcessThreads() const
{
return m_localConfigurator.getMaxFastSyncProcessThreads();
}
SV_UINT ConfigureVxAgentProxy::getMaxFastSyncGenerateHCDThreads() const
{
return m_localConfigurator.getMaxFastSyncGenerateHCDThreads() ;
}
//End of the change
//#endif
SV_UINT ConfigureVxAgentProxy::getMaxClusterProcessThreads() const
{
return m_localConfigurator.getMaxClusterProcessThreads();
}
SV_UINT ConfigureVxAgentProxy::getMaxGenerateClusterBitmapThreads() const
{
return m_localConfigurator.getMaxGenerateClusterBitmapThreads() ;
}
StorageFailover ConfigureVxAgentProxy::failoverStorage(std::string const& action, bool migration) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg("failoverStorage", m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, action, migration);
m_transport( sr );
return sr.UnSerialize<StorageFailover>();
// return unmarshal<StorageFailover> ( m_transport( marshalCxCall( m_dpc, "failoverStorage", action, migration ) ) );
}
bool ConfigureVxAgentProxy::getDICheck() const
{
return m_localConfigurator.getDICheck();
}
bool ConfigureVxAgentProxy::getSVDCheck() const
{
return m_localConfigurator.getSVDCheck() ;
}
bool ConfigureVxAgentProxy::getDirectTransfer() const
{
return m_localConfigurator.getDirectTransfer();
}
bool ConfigureVxAgentProxy::CompareInInitialDirectSync() const
{
return m_localConfigurator.CompareInInitialDirectSync() ;
}
bool ConfigureVxAgentProxy::IsProcessClusterPipeEnabled() const
{
return m_localConfigurator.IsProcessClusterPipeEnabled() ;
}
SV_UINT ConfigureVxAgentProxy::getMaxHcdsAllowdAtCx() const
{
return m_localConfigurator.getMaxHcdsAllowdAtCx() ;
}
SV_UINT ConfigureVxAgentProxy::getMaxClusterBitmapsAllowdAtCx() const
{
return m_localConfigurator.getMaxClusterBitmapsAllowdAtCx() ;
}
SV_UINT ConfigureVxAgentProxy::getSecsToWaitForHcdSend() const
{
return m_localConfigurator.getSecsToWaitForHcdSend() ;
}
SV_UINT ConfigureVxAgentProxy::getSecsToWaitForClusterBitmapSend() const
{
return m_localConfigurator.getSecsToWaitForClusterBitmapSend() ;
}
bool ConfigureVxAgentProxy::getTSCheck() const
{
return m_localConfigurator.getTSCheck() ;
}
SV_ULONG ConfigureVxAgentProxy::getDirectSyncBlockSizeInKB() const
{
return m_localConfigurator.getDirectSyncBlockSizeInKB() ;
}
void ConfigureVxAgentProxy::registerIScsiInitiatorName(std::string const& initiatorName) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg("registerIScsiInitiatorName", m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, initiatorName);
m_transport( sr );
}
SV_UINT ConfigureVxAgentProxy::updateFlushAndHoldWritesPendingStatus(std::string volumename,bool status,std::string errmsg, SV_INT error_num) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(UPDATE_FLUSH_AND_HOLD_WRITES_PENDING, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, volumename, status, errmsg, error_num);
m_transport( sr );
return sr.UnSerialize<SV_UINT>();
}
SV_UINT ConfigureVxAgentProxy::updateFlushAndHoldResumePendingStatus(std::string volumename,bool status,std::string errmsg, SV_INT error_num) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(UPDATE_FLUSH_AND_HOLD_RESUME_PENDING, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, volumename, status, errmsg, error_num);
m_transport( sr );
return sr.UnSerialize<SV_UINT>();
}
FLUSH_AND_HOLD_REQUEST ConfigureVxAgentProxy::getFlushAndHoldRequestSettings(std::string volumename) const
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(GET_FLUSH_AND_HOLD_WRITES_REQUEST_SETTINGS, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, volumename);
m_transport( sr );
return sr.UnSerialize<FLUSH_AND_HOLD_REQUEST>();
}
std::string ConfigureVxAgentProxy::getTargetChecksumsDir() const
{
return m_localConfigurator.getTargetChecksumsDir() ;
}
bool ConfigureVxAgentProxy::MonitorEvents () const
{
DebugPrintf(SV_LOG_DEBUG, "ENTERED %s\n", FUNCTION_NAME) ;
bool bretStatus = false;
try
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(MONITOR_EVENTS, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi);
m_transport( sr );
bretStatus = sr.UnSerialize<bool>() ;
}
catch( std::string const& e ) {
DebugPrintf(SV_LOG_ERROR, "\n%s encountered exception %s.\n", FUNCTION_NAME, e.c_str());
}
catch( char const* e ) {
DebugPrintf(SV_LOG_ERROR, "\n%s encountered exception %s.\n", FUNCTION_NAME, e);
}
catch ( ContextualException const& ce ) {
DebugPrintf(SV_LOG_ERROR, "\n%s encountered exception %s.\n", FUNCTION_NAME, ce.what());
}
catch( std::exception const& e ) {
DebugPrintf(SV_LOG_ERROR, "\n%s encountered exception %s.\n", FUNCTION_NAME, e.what());
}
DebugPrintf(SV_LOG_DEBUG, "EXITED %s\n", FUNCTION_NAME) ;
return bretStatus;
}
bool ConfigureVxAgentProxy::EnableVolumeUnprovisioningPolicy(std::list <std::string> &sourceList) const
{
DebugPrintf(SV_LOG_DEBUG, "ENTERED %s\n", FUNCTION_NAME) ;
bool bretStatus = false;
try
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(ENABLE_VOLUME_UNPROVISIONING, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi,sourceList);
m_transport( sr );
bretStatus = sr.UnSerialize<bool>() ;
}
catch( std::string const& e ) {
DebugPrintf(SV_LOG_ERROR, "\n%s encountered exception %s.\n", FUNCTION_NAME, e.c_str());
}
catch( char const* e ) {
DebugPrintf(SV_LOG_ERROR, "\n%s encountered exception %s.\n", FUNCTION_NAME, e);
}
catch ( ContextualException const& ce ) {
DebugPrintf(SV_LOG_ERROR, "\n%s encountered exception %s.\n", FUNCTION_NAME, ce.what());
}
catch( std::exception const& e ) {
DebugPrintf(SV_LOG_ERROR, "\n%s encountered exception %s.\n", FUNCTION_NAME, e.what());
}
DebugPrintf(SV_LOG_DEBUG, "EXITED %s\n", FUNCTION_NAME) ;
return bretStatus;
}
/* TODO: make a class that is used commonly by
cxproxy and configurevxagent proxy */
void ConfigureVxAgentProxy::setApiAndFirstArg(const char *apiname,
const char *dpc,
const char **apitocall,
const char **firstargtoapi) const
{
if (PHPSerialize == m_serializeType)
{
*apitocall = dpc;
*firstargtoapi = apiname;
}
else if (Xmlize == m_serializeType)
{
*apitocall = apiname;
*firstargtoapi = dpc;
}
}
ESERIALIZE_TYPE ConfigureVxAgentProxy::getSerializerType() const
{
return m_localConfigurator.getSerializerType();
}
void ConfigureVxAgentProxy::setHostId(const std::string& hostId) const
{
m_localConfigurator.setHostId(hostId);
}
void ConfigureVxAgentProxy::setResourceId(const std::string& resourceId) const
{
m_localConfigurator.setResourceId(resourceId);
}
void ConfigureVxAgentProxy::setSerializerType(ESERIALIZE_TYPE serializerType) const
{
m_localConfigurator.setSerializerType(serializerType);
}
bool ConfigureVxAgentProxy::IsVsnapDriverAvailable() const {
return m_localConfigurator.IsVsnapDriverAvailable();
}
bool ConfigureVxAgentProxy::IsVolpackDriverAvailable() const {
return m_localConfigurator.IsVolpackDriverAvailable();
}
SV_UINT ConfigureVxAgentProxy::getSentinalStartStatus() const
{
return m_localConfigurator.getSentinalStartStatus();
}
SV_UINT ConfigureVxAgentProxy::getDataProtectionStartStatus() const
{
return m_localConfigurator.getDataProtectionStartStatus();
}
SV_UINT ConfigureVxAgentProxy::getCDPManagerStartStatus() const
{
return m_localConfigurator.getCDPManagerStartStatus();
}
SV_UINT ConfigureVxAgentProxy::getCacheManagerStartStatus() const
{
return m_localConfigurator.getCacheManagerStartStatus();
}
bool ConfigureVxAgentProxy::canEditCatchePath() const
{
return m_localConfigurator.canEditCatchePath();
}
bool ConfigureVxAgentProxy::BackupAgentPause(CDP_DIRECTION direction, const std::string& devicename) const
{
bool bretStatus ;
try
{
if( m_serializeType == Xmlize )
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(BACKUPAGENT_PAUSE, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, direction, devicename );
m_transport( sr );
bretStatus = sr.UnSerialize<bool>() ;
}
}
catch( std::string const& e ) {
DebugPrintf(SV_LOG_ERROR, "\n%s encountered exception %s.\n", FUNCTION_NAME, e.c_str());
}
catch( char const* e ) {
DebugPrintf(SV_LOG_ERROR, "\n%s encountered exception %s.\n", FUNCTION_NAME, e);
}
catch ( ContextualException const& ce ) {
DebugPrintf(SV_LOG_ERROR, "\n%s encountered exception %s.\n", FUNCTION_NAME, ce.what());
}
catch( std::exception const& e ) {
DebugPrintf(SV_LOG_ERROR, "\n%s encountered exception %s.\n", FUNCTION_NAME, e.what());
}
DebugPrintf(SV_LOG_DEBUG, "EXITED %s\n", FUNCTION_NAME) ;
return bretStatus;
}
bool ConfigureVxAgentProxy::BackupAgentPauseTrack(CDP_DIRECTION direction, const std::string& devicename) const
{
bool bretStatus ;
try
{
if( m_serializeType == Xmlize )
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(BACKUPAGENT_PAUSE_TRACK, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi, direction, devicename );
m_transport( sr );
bretStatus = sr.UnSerialize<bool>() ;
}
}
catch( std::string const& e ) {
DebugPrintf(SV_LOG_ERROR, "\n%s encountered exception %s.\n", FUNCTION_NAME, e.c_str());
}
catch( char const* e ) {
DebugPrintf(SV_LOG_ERROR, "\n%s encountered exception %s.\n", FUNCTION_NAME, e);
}
catch ( ContextualException const& ce ) {
DebugPrintf(SV_LOG_ERROR, "\n%s encountered exception %s.\n", FUNCTION_NAME, ce.what());
}
catch( std::exception const& e ) {
DebugPrintf(SV_LOG_ERROR, "\n%s encountered exception %s.\n", FUNCTION_NAME, e.what());
}
DebugPrintf(SV_LOG_DEBUG, "EXITED %s\n", FUNCTION_NAME) ;
return bretStatus;
}
bool ConfigureVxAgentProxy::AnyPendingEvents() const
{
DebugPrintf(SV_LOG_DEBUG, "ENTERED %s\n", FUNCTION_NAME) ;
bool bretStatus = false;
try
{
if( m_serializeType == Xmlize )
{
Serializer sr(m_serializeType);
const char *apitocall;
const char *firstargtoapi;
setApiAndFirstArg(PENDING_EVENTS, m_dpc.c_str(), &apitocall, &firstargtoapi);
sr.Serialize(apitocall, firstargtoapi);
m_transport( sr );
bretStatus = sr.UnSerialize<bool>() ;
}
}
catch( std::string const& e ) {
DebugPrintf(SV_LOG_ERROR, "\n%s encountered exception %s.\n", FUNCTION_NAME, e.c_str());
}
catch( char const* e ) {
DebugPrintf(SV_LOG_ERROR, "\n%s encountered exception %s.\n", FUNCTION_NAME, e);
}
catch ( ContextualException const& ce ) {
DebugPrintf(SV_LOG_ERROR, "\n%s encountered exception %s.\n", FUNCTION_NAME, ce.what());
}
catch( std::exception const& e ) {
DebugPrintf(SV_LOG_ERROR, "\n%s encountered exception %s.\n", FUNCTION_NAME, e.what());
}
DebugPrintf(SV_LOG_DEBUG, "EXITED %s\n", FUNCTION_NAME) ;
return bretStatus;
}
std::string ConfigureVxAgentProxy::getMTSupportedDataPlanes() const
{
return m_localConfigurator.getMTSupportedDataPlanes();
}
SV_ULONGLONG ConfigureVxAgentProxy::getMinAzureUploadSize() const
{
return m_localConfigurator.getMinAzureUploadSize();
}
unsigned int ConfigureVxAgentProxy::getMinTimeGapBetweenAzureUploads() const
{
return m_localConfigurator.getMinTimeGapBetweenAzureUploads();
}
unsigned int ConfigureVxAgentProxy::getTimeGapBetweenFileArrivalCheck() const
{
return m_localConfigurator.getTimeGapBetweenFileArrivalCheck();
}
unsigned int ConfigureVxAgentProxy::getMaxAzureAttempts() const
{
return m_localConfigurator.getMaxAzureAttempts();
}
unsigned int ConfigureVxAgentProxy::getAzureRetryDelayInSecs() const
{
return m_localConfigurator.getAzureRetryDelayInSecs();
}
unsigned int ConfigureVxAgentProxy::getAzureImplType() const
{
return m_localConfigurator.getAzureImplType();
}
int ConfigureVxAgentProxy::getMonitoringCxpsClientTimeoutInSec() const
{
return m_localConfigurator.getMonitoringCxpsClientTimeoutInSec();
}