func()

in pkg/resources/statefulset/ndbmtd_statefulset.go [93:213]


func (nss *ndbmtdStatefulSet) getResourceRequestRequirements(nc *v1.NdbCluster) (corev1.ResourceList, error) {

	// Connect to the Management Server
	mgmClient, err := mgmapi.NewMgmClient(nc.GetConnectstring())
	if err != nil {
		klog.Errorf("Failed to connect to Management Server : %s", err)
		return nil, err
	}

	// Retrieve all the config values required to compute the memory requirements
	dataMemory, err := mgmClient.GetDataMemory(0)
	if err != nil {
		klog.Errorf("GetDataMemory failed with error %s", err)
		return nil, err
	}

	maxNoOfTables, err := mgmClient.GetMaxNoOfTables(0)
	if err != nil {
		klog.Errorf("GetMaxNoOfTables failed with error %s", err)
		return nil, err
	}

	maxNoOfAttributes, err := mgmClient.GetMaxNoOfAttributes(0)
	if err != nil {
		klog.Errorf("GetMaxNoOfAttributes failed with error %s", err)
		return nil, err
	}

	maxNoOfOrderedIndexes, err := mgmClient.GetMaxNoOfOrderedIndexes(0)
	if err != nil {
		klog.Errorf("GetMaxNoOfOrderedIndexes failed with error %s", err)
		return nil, err
	}

	maxNoOfUniqueHashIndexes, err := mgmClient.GetMaxNoOfUniqueHashIndexes(0)
	if err != nil {
		klog.Errorf("GetMaxNoOfUniqueHashIndexes failed with error %s", err)
		return nil, err
	}

	maxNoOfConcurrentOperations, err := mgmClient.GetMaxNoOfConcurrentOperations(0)
	if err != nil {
		klog.Errorf("GetMaxNoOfConcurrentOperations failed with error %s", err)
		return nil, err
	}

	transactionBufferMemory, err := mgmClient.GetTransactionBufferMemory(0)
	if err != nil {
		klog.Errorf("GetTransactionBufferMemory failed with error %s", err)
		return nil, err
	}

	indexMemory, err := mgmClient.GetIndexMemory(0)
	if err != nil {
		klog.Errorf("GetIndexMemory failed with error %s", err)
		return nil, err
	}

	redoBuffer, err := mgmClient.GetRedoBuffer(0)
	if err != nil {
		klog.Infof("GetRedoBuffer failed with error %s", err)
		return nil, err
	}

	longMessageBuffer, err := mgmClient.GetLongMessageBuffer(0)
	if err != nil {
		klog.Errorf("GetLongMessageBuffer failed with error %s", err)
		return nil, err
	}

	diskPageBufferMemory, err := mgmClient.GetDiskPageBufferMemory(0)
	if err != nil {
		klog.Errorf("GetDiskPageBufferMemory failed with error %s", err)
		return nil, err
	}

	sharedGlobalMemory, err := mgmClient.GetSharedGlobalMemory(0)
	if err != nil {
		klog.Errorf("GetSharedGlobalMemory failed with error %s", err)
		return nil, err
	}

	transactionMemory, err := mgmClient.GetTransactionMemory(0)
	if err != nil {
		klog.Errorf("GetTransactionMemory failed with error %s", err)
		return nil, err
	}

	noOfFragmentLogParts, err := mgmClient.GetNoOfFragmentLogParts(0)
	if err != nil {
		klog.Errorf("GetNoOfFragmentLogParts failed with error %s", err)
		return nil, err
	}

	//size of the ndbmtd executable inside the pod
	//mysql version: 8.0.29
	binarySize := uint64(12746520)

	if transactionMemory == 0 {
		transactionMemory = dataMemory / 10
	}

	totalMemory := dataMemory +
		uint64(maxNoOfTables) +
		uint64(maxNoOfAttributes) +
		uint64(maxNoOfOrderedIndexes) +
		uint64(maxNoOfUniqueHashIndexes) +
		uint64(maxNoOfConcurrentOperations) +
		uint64(transactionBufferMemory) +
		indexMemory +
		uint64(redoBuffer*noOfFragmentLogParts) + uint64(noOfFragmentLogParts) +
		uint64(longMessageBuffer) +
		diskPageBufferMemory +
		sharedGlobalMemory +
		transactionMemory +
		binarySize

	return corev1.ResourceList{
		"memory": resource.MustParse(strconv.FormatUint(totalMemory, 10)),
	}, nil
}