From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <pbs-devel-bounces@lists.proxmox.com>
Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9])
	by lore.proxmox.com (Postfix) with ESMTPS id 90E171FF168
	for <inbox@lore.proxmox.com>; Tue, 18 Mar 2025 10:48:57 +0100 (CET)
Received: from firstgate.proxmox.com (localhost [127.0.0.1])
	by firstgate.proxmox.com (Proxmox) with ESMTP id EC9C71A24F;
	Tue, 18 Mar 2025 10:48:45 +0100 (CET)
From: Christian Ebner <c.ebner@proxmox.com>
To: pbs-devel@lists.proxmox.com
Date: Tue, 18 Mar 2025 10:47:55 +0100
Message-Id: <20250318094756.204368-1-c.ebner@proxmox.com>
X-Mailer: git-send-email 2.39.5
MIME-Version: 1.0
X-SPAM-LEVEL: Spam detection results:  0
 AWL 0.032 Adjusted score from AWL reputation of From: address
 BAYES_00                 -1.9 Bayes spam probability is 0 to 1%
 DMARC_MISSING             0.1 Missing DMARC policy
 KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment
 SPF_HELO_NONE           0.001 SPF: HELO does not publish an SPF Record
 SPF_PASS               -0.001 SPF: sender matches SPF record
Subject: [pbs-devel] [PATCH v2 proxmox-backup 1/2] fix: ui: sync job: edit
 rate limit based on sync direction
X-BeenThere: pbs-devel@lists.proxmox.com
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Proxmox Backup Server development discussion
 <pbs-devel.lists.proxmox.com>
List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pbs-devel>, 
 <mailto:pbs-devel-request@lists.proxmox.com?subject=unsubscribe>
List-Archive: <http://lists.proxmox.com/pipermail/pbs-devel/>
List-Post: <mailto:pbs-devel@lists.proxmox.com>
List-Help: <mailto:pbs-devel-request@lists.proxmox.com?subject=help>
List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel>, 
 <mailto:pbs-devel-request@lists.proxmox.com?subject=subscribe>
Reply-To: Proxmox Backup Server development discussion
 <pbs-devel@lists.proxmox.com>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Errors-To: pbs-devel-bounces@lists.proxmox.com
Sender: "pbs-devel" <pbs-devel-bounces@lists.proxmox.com>

Commit 9aa213b8 ("ui: sync job: adapt edit window to be used for pull
and push") adapted the sync job edit so jobs in both, push and pull
can be edited using the same window. This however did not include the
switching of the direction to which the http client rate limit is
applied to.

Fix this by further adding the edit field for `rate-out` and
conditionally hide the less useful rate limit direction (rate-out for
pull and rate-in for push). This allows to preserve the values if
explicitly set via the sync job config.

Reported in the community forum:
https://forum.proxmox.com/threads/163414/

Fixes: 9aa213b8 ("ui: sync job: adapt edit window to be used for pull and push")
Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
---
changes since version 1 (thanks at Dominik for feedback):
- add additional rate limit field, but hide less useful one based on
  sync direction
- preserve values of unchanged rate limit for less useful direction if
  set via config.

 www/window/SyncJobEdit.js | 39 +++++++++++++++++++++++++++++++++------
 1 file changed, 33 insertions(+), 6 deletions(-)

diff --git a/www/window/SyncJobEdit.js b/www/window/SyncJobEdit.js
index bcd2f2fb2..683babaf2 100644
--- a/www/window/SyncJobEdit.js
+++ b/www/window/SyncJobEdit.js
@@ -72,9 +72,16 @@ Ext.define('PBS.window.SyncJobEdit', {
 
 	init: function() {
 	    let view = this.getView();
-	    if (view.syncDirectionPush && view.datastore !== undefined) {
-		let localNs = view.down('pbsNamespaceSelector[name=ns]').getValue();
-		view.down('pbsGroupFilter').setLocalNamespace(view.datastore, localNs);
+	    // Cannot use cbind to hide rate limit field depending on sync direction,
+	    // set it in init as workaround.
+	    if (view.syncDirectionPush) {
+		view.down('pmxBandwidthField[name=rate-in]').setHidden(true);
+		if (view.datastore !== undefined) {
+		    let localNs = view.down('pbsNamespaceSelector[name=ns]').getValue();
+		    view.down('pbsGroupFilter').setLocalNamespace(view.datastore, localNs);
+		}
+	    } else {
+		view.down('pmxBandwidthField[name=rate-out]').setHidden(true);
 	    }
 	},
     },
@@ -89,6 +96,15 @@ Ext.define('PBS.window.SyncJobEdit', {
 	me.callParent([values]);
     },
 
+    getVisibleRateLimitField: function() {
+	let me = this;
+	if (me.syncDirectionPush) {
+	    return me.down('field[name=rate-out]');
+	} else {
+	    return me.down('field[name=rate-in]');
+	}
+    },
+
     items: {
 	xtype: 'tabpanel',
 	bodyPadding: 10,
@@ -105,6 +121,7 @@ Ext.define('PBS.window.SyncJobEdit', {
 		    }
 		    if (!me.isCreate) {
 			PBS.Utils.delete_if_default(values, 'rate-in');
+			PBS.Utils.delete_if_default(values, 'rate-out');
 			PBS.Utils.delete_if_default(values, 'remote');
 			if (typeof values.delete === 'string') {
 			    values.delete = values.delete.split(',');
@@ -189,7 +206,17 @@ Ext.define('PBS.window.SyncJobEdit', {
 			fieldLabel: gettext('Rate Limit'),
 			emptyText: gettext('Unlimited'),
 			submitAutoScaledSizeUnit: true,
-			// NOTE: handle deleteEmpty in onGetValues due to bandwidth field having a cbind too
+			// NOTE: handle deleteEmpty in onGetValues due to bandwidth field having a cbind too,
+			// further hide rate limit field depending on sync direction in controller init.
+		    },
+		    {
+			xtype: 'pmxBandwidthField',
+			name: 'rate-out',
+			fieldLabel: gettext('Rate Limit'),
+			emptyText: gettext('Unlimited'),
+			submitAutoScaledSizeUnit: true,
+			// NOTE: handle deleteEmpty in onGetValues due to bandwidth field having a cbind too,
+			// further hide rate limit field depending on sync direction in controller init.
 		    },
 		],
 
@@ -221,7 +248,7 @@ Ext.define('PBS.window.SyncJobEdit', {
 				let me = this;
 				let form = me.up('pbsSyncJobEdit');
 				let nsField = form.down('field[name=remote-ns]');
-				let rateLimitField = form.down('field[name=rate-in]');
+				let rateLimitField = form.getVisibleRateLimitField();
 				let remoteField = form.down('field[name=remote]');
 				let storeField = form.down('field[name=remote-store]');
 
@@ -263,7 +290,7 @@ Ext.define('PBS.window.SyncJobEdit', {
 				let me = this;
 				let remoteStoreField = me.up('pbsSyncJobEdit').down('field[name=remote-store]');
 				remoteStoreField.setRemote(value);
-				let rateLimitField = me.up('pbsSyncJobEdit').down('field[name=rate-in]');
+				let rateLimitField = me.up('pbsSyncJobEdit').getVisibleRateLimitField();
 				rateLimitField.setDisabled(!value);
 				if (!value) {
 				    rateLimitField.setValue(null);
-- 
2.39.5



_______________________________________________
pbs-devel mailing list
pbs-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel